Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以从一个元组初始化多个变量吗?_C#_Tuples - Fatal编程技术网

C# 可以从一个元组初始化多个变量吗?

C# 可以从一个元组初始化多个变量吗?,c#,tuples,C#,Tuples,在某些语言(如PHP、Haskell或Scala)中,可以通过类似于以下伪代码的方式从元组分配多个变量: list(string value1, string value2) = tupleWithTwoValues; 但是,如果不编写更长、更难看的代码,我无法在C中找到这样做的方法: string firstValue = tupleWithTwoValues.Item1; string secondValue = tupleWithTwoValues.Item2; 这种两行解决方案显然不

在某些语言(如PHP、Haskell或Scala)中,可以通过类似于以下伪代码的方式从元组分配多个变量:

list(string value1, string value2) = tupleWithTwoValues;
但是,如果不编写更长、更难看的代码,我无法在C中找到这样做的方法:

string firstValue = tupleWithTwoValues.Item1;
string secondValue = tupleWithTwoValues.Item2;
这种两行解决方案显然不是世界末日,但我一直在寻找编写更漂亮代码的方法


有人知道更好的方法吗?

从技术上讲,您可以使用以下语法使用一条语句而不是两条语句来实现这一点,尽管字符数几乎相同

string firstValue = tupleWithTwoValues.Item1
    , secondValue = tupleWithTwoValues.Item2;
有效期至C 6:

不,这是不可能的。C语言中没有这样的语言特性

如果您认为以下代码:

string firstValue = tupleWithTwoValues.Item1;
string secondValue = tupleWithTwoValues.Item2;
如果是丑陋的,那么首先应该重新考虑使用元组

更新:从C7开始,元组解构现在是可能的。有关更多信息,请参阅


也请参见Jared的。

不,这在C语言中不受支持,尽管其他人建议添加这样的功能和

它由F支持,但是:

let (f, b) = ("foo", "bar")

对于列表,您可以执行以下操作:

var list = new List<string>{tuple.Item1, tuple.Item2};
没那么罗嗦 但是对于多个变量,不行。你不能这样做。

我就是这么做的:

public static TResult Select<T1, T2, TResult>(this Tuple<T1, T2> source, Func<T1, T2, TResult> selector)
{
    return selector(source.Item1, source.Item2);
}
// this allows us ...
GetAssociationAndMember().Select((associationId,memberId) => {
    // do things with the aptly named variables
});

这在C7中现在可用:

public (string first, string last) FullName()
{
    return ("Rince", "Wind");
}

(var first, var last) = FullName();
您甚至可以使用单个var声明:

var (first, last) = FullName();
更多关于解构元组的信息,请参见。

是的,在C中这是可能的。 您需要在项目中安装包Value.Tuple。 你可以这样做

List<Tuple<string,string>>() lstTuple = GetYourTupleValue();
foreach(var item in lstTuple)
{
  (string Value1, string Value2 ) = item;
}
Console.WriteLine(item.Value1);

不能从元组初始化多个变量。是的,元组是丑陋的C@HighCore讨厌的人会讨厌的。虽然公平地说,我可能可以通过提到Ruby而不是PHP来避免这样的尖刻:另请看这个重复的问题:我要补充的是,在C语言中移动东西并不是经常做的事情。除非你想给这个东西起一个较短的名字,并在代码中多次使用它,您可能会直接访问tupleWithTwoValues.Item1,而不是将其放入variable.True中。发布后几秒钟,我突然意识到,每当我考虑元组时,像DTO这样更丰富的解决方案往往是最好的选择。@Micah是的,包括语义总是一个加号。元组通常只在非常特定的场景中才是一件好事。这在C:@Jared中现在可用。谢谢你指出这一点。更新了我的答案,尽管在2014年,该语言功能还不存在。它现在以C语言提供: