为了账号安全,请及时绑定邮箱和手机立即绑定

传递 ValueTuple 而不是参数

传递 ValueTuple 而不是参数

C#
森栏 2022-12-04 13:12:31
是否可以这样做(或者我可能需要特定版本的 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 laterDoWrite(GetTuple());
查看完整描述

3 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

是的,您可以使用Named 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));


查看完整回答
反对 回复 2022-12-04
?
www说

TA贡献1775条经验 获得超8个赞

你可以这样做:


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;


查看完整回答
反对 回复 2022-12-04
?
米脂

TA贡献1836条经验 获得超3个赞

代码中有一些错误,简而言之如下:


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


查看完整回答
反对 回复 2022-12-04
  • 3 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信