4 回答

TA貢獻1820條經驗 獲得超9個贊
函數僅返回一個值(即 one Type
),在本例中GetNum
返回 a ValueTuple<int, string>
。
允許該GetLine
方法使用 的返回類型的一種GetNum
方法是編寫該方法的重載,該方法接受 a并將傳遞andValueTuple<int, string>
的結果返回到原始方法:Item1
Item2
public string GetLine((int, string) t) => GetLine(t.Item1, t.Item2);
現在您可以使用一個方法的返回值作為第二個方法的參數:
var result = GetLine(GetNum());

TA貢獻1815條經驗 獲得超6個贊
沒有任何 C# 語法可以真正滿足您的需求。具有兩個參數的方法(例如您的GetLine()方法)需要向其傳遞兩個參數,而 C# 不提供解構元組的方法,除非解構為特定變量。由于方法的參數只是值(按引用參數除外),因此沒有變量可用于解構元組。
有很多不同的方法可以做類似的事情。然而,恕我直言,最接近你想做的事情看起來像這樣:
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);
}
}
即,您可以在元組上調用擴展方法,它將元組的各個值作為單獨的方法參數傳遞給所提供的方法。使用了這樣的東西:
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}";
盡管如此,我不確定任何替代方案(包括上述方案)是否真的比在調用站點編寫中間代碼好得多:
(int n, string s) = GetNum();
GetLine(n, s);

TA貢獻1828條經驗 獲得超13個贊

TA貢獻1993條經驗 獲得超6個贊
有一個模板——它看起來像:
public static string GetLine(Action<string, int> passedProc, otherParms) // etc
這需要一個過程。
對于一個函數,你可以這樣做
public static string GetLine(Function<(string, int)> passedFunc, otherParms) // etc
然后您可以在 GetLine 過程中調用 PassedFunc 并取回元組。
- 4 回答
- 0 關注
- 178 瀏覽
添加回答
舉報