4 回答
TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊
函數(shù)僅返回一個(gè)值(即 one Type),在本例中GetNum返回 a ValueTuple<int, string>。
允許該GetLine方法使用 的返回類型的一種GetNum方法是編寫該方法的重載,該方法接受 a并將傳遞andValueTuple<int, string>的結(jié)果返回到原始方法:Item1Item2
public string GetLine((int, string) t) => GetLine(t.Item1, t.Item2);
現(xiàn)在您可以使用一個(gè)方法的返回值作為第二個(gè)方法的參數(shù):
var result = GetLine(GetNum());
TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
沒(méi)有任何 C# 語(yǔ)法可以真正滿足您的需求。具有兩個(gè)參數(shù)的方法(例如您的GetLine()方法)需要向其傳遞兩個(gè)參數(shù),而 C# 不提供解構(gòu)元組的方法,除非解構(gòu)為特定變量。由于方法的參數(shù)只是值(按引用參數(shù)除外),因此沒(méi)有變量可用于解構(gòu)元組。
有很多不同的方法可以做類似的事情。然而,恕我直言,最接近你想做的事情看起來(lái)像這樣:
static class Extensions
{
public static TResult CallDeconstructed<T1, T2, TResult>(this (T1, T2) tuple, Func<T1, T2, TResult> func)
{
return func(tuple.Item1, tuple.Item2);
}
}
即,您可以在元組上調(diào)用擴(kuò)展方法,它將元組的各個(gè)值作為單獨(dú)的方法參數(shù)傳遞給所提供的方法。使用了這樣的東西:
public static void Main()
{
//Console.WriteLine(GetLine(GetNum()));
Console.WriteLine(GetNum().CallDeconstructed(GetLine));
}
public static (int, string) GetNum() => (5, "five");
public static string GetLine(int n, string s) => $"{n} {s}";
盡管如此,我不確定任何替代方案(包括上述方案)是否真的比在調(diào)用站點(diǎn)編寫中間代碼好得多:
(int n, string s) = GetNum();
GetLine(n, s);
TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
你可以這樣做:
public static void Main()
{
Console.WriteLine(GetLine(GetNum()));
}
public static (int,string) GetNum() => (5,"five");
public static string GetLine((int, string) a) {
var (number, text) = a;
return $"{number}, {text}";
}
為什么這有效?(int, string)函數(shù)的 in 參數(shù)實(shí)際上GetLine是一個(gè)類型,就像floator一樣double。因此,實(shí)際就地解構(gòu)它是沒(méi)有意義的。當(dāng)編寫函數(shù)參數(shù)時(shí),您不應(yīng)該在那里編寫任何邏輯 - 例如,您不能在那里增加一個(gè)數(shù)字。您只需列出參數(shù)類型和參數(shù)名稱。
TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
有一個(gè)模板——它看起來(lái)像:
public static string GetLine(Action<string, int> passedProc, otherParms) // etc
這需要一個(gè)過(guò)程。
對(duì)于一個(gè)函數(shù),你可以這樣做
public static string GetLine(Function<(string, int)> passedFunc, otherParms) // etc
然后您可以在 GetLine 過(guò)程中調(diào)用 PassedFunc 并取回元組。
- 4 回答
- 0 關(guān)注
- 221 瀏覽
添加回答
舉報(bào)
