这个问题在这里已有答案:
是否有可能以这种方式(或者我需要特定版本的C#)?
Function<int,int,int,int> triSum = (a,b,c) => {return a+b+c;};
var tup = (1,2,3);
triSum(tup); //passing one tuple instead of multiple args
更新:我的意思是传递元组而不是单独的参数。
public void DoWrite(string s1, string s2)
{
Console.WriteLine(s1+s2);
}
public (string,string) GetTuple()
{
//return some of them
}
//few lines later
DoWrite(GetTuple());
是的,您可以使用命名ValueTuples C#7.1,如果适合,甚至只使用本地方法
Action<(int a, int b, int c)> triSum = t
=> Console.WriteLine(t.a + t.b + t.c);
triSum((1, 2, 3));
或者只是作为一种本地方法
void TriSum((int a, int b, int c) t)
=> Console.WriteLine(t.a + t.b + t.c);
TriSum((1, 2, 3));
你可以这样做:
Func<(int a, int b, int c), int> triSum = x => { return x.a + x.b + x.c; };
var tup = (1, 2, 3);
var sum = triSum(tup);
或者更简洁一点:
Func<(int a, int b, int c), int> triSum = x => x.a + x.b + x.c;
代码中存在一些错误,简而言之,以下工作:
Func<Tuple<int,int,int>,int > triSum = a => { return a.Item1 + a.Item2 + a.Item3; };
Tuple<int,int,int> tup = new Tuple<int, int, int>(3,4,5);
triSum(tup); //passing one tuple instead of multiple args
上面代码中的问题:
Action
是一个返回void
的函数委托,所以你应该使用Func