C#中的元组和解包赋值支持?在Python中,我可以编写defmyMethod():#someworktofindtherowandcolreturn(row,col)row,col=myMethod()mylist[row][col]#doworkonthiselement但在C#中,我发现自己在写int[]MyMethod(){//一些查找行和列的工作returnnewint[]{row,col}}int[]coords=MyMethod();mylist[coords[0]][coords[1]]//处理这个元素Pythonic方式显然更简洁。有没有办法在C#中执行此操作?.NET中有一组元组类:TupleMyMethod(){//查找行和列的一些工作returnTuple.Create(row,col);但是没有像在Python中那样将它们解包的紧凑语法:Tuplecoords=MyMethod();mylist[coords.Item1][coords.Item2]//在这个元素上工作从C#7开始,你可以使用ValueTuple:Install-PackageSystem.ValueTuple然后你可以打包ValueTuples来压缩ValueTuples:(int,int)MyMethod(){返回(行,列);}(introw,intcol)=MyMethod();//mylist[row][col]扩展可能更接近Python元组拆包,更高效但更具可读性(和Pythonic):publicclassExtensions{publicstaticvoidUnpackTo(thisTuplet,outT1v1,outT2v2){v1=t.Item1;v2=t.Item2;}}TupleMyMethod(){//查找行和列的一些工作returnTuple.Create(row,col);}整数行,列;MyMethod().UnpackTo(outrow,outcol);我的列表[行][列];//处理这个元素C#是一种强类型语言,它的类型系统强制执行函数可以没有(void)或1个返回值的规则。C#4.0引入了Tuple类:TupleMyMethod(){returnTuple.Create(0,1);}//用法:varmyTuple=MyMethod();varrow=myTuple.Item1;//0的值varcol=myTuple.Item2;//值为1这是一个示例zip,其值已解压。这里zip在元组上返回一个迭代器。int[]数字={1,2,3,4};string[]words={"一","二","三"};foreach((varn,varw)innumbers.Zip(words,Tuple.Create)){Console.WriteLine("{0}->{1}",n,w);}输出:以上是C#学习教程:TupleandunpackassignmentsupportinC#?分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——1->一2->二3->三本文收集自网络,确实不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
