传递ValueTuple而不是参数

时间:2019-04-09 08:54:05

标签: c# tuples parameter-passing valuetuple

是否可以通过这种方式进行操作(或者我需要特定版本的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());

3 个答案:

答案 0 :(得分:1)

是的,您可以使用命名 ValueTuples C#7.1,甚至可以使用 Local Method (如果适用)

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));

答案 1 :(得分:1)

您可以这样做:

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;

答案 2 :(得分:0)

代码中有一些错误,简而言之,是以下工作:

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

上面的代码中的问题:

  1. Action是一个函数委托,它返回void,因此您应该使用Func
  2. 将参数传递给Action的方式使它们成为三个独立的整数而不是一个元组
  3. 此外,语法var tup =(1,2)从c#7.0起使用,不能在较早的版本中使用(尽管有nuget包)