4 回答

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

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

TA貢獻1828條經(jīng)驗 獲得超13個贊
你可以這樣做:
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ù)實際上GetLine是一個類型,就像floator一樣double。因此,實際就地解構(gòu)它是沒有意義的。當(dāng)編寫函數(shù)參數(shù)時,您不應(yīng)該在那里編寫任何邏輯 - 例如,您不能在那里增加一個數(shù)字。您只需列出參數(shù)類型和參數(shù)名稱。

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