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

Mic*_*cah 10 c# tuples

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

list(string value1, string value2) = tupleWithTwoValues;
Run Code Online (Sandbox Code Playgroud)

我找不到在C#中执行此操作的方法,但是,如果不写更长,更丑陋的代码:

string firstValue = tupleWithTwoValues.Item1;
string secondValue = tupleWithTwoValues.Item2;
Run Code Online (Sandbox Code Playgroud)

这个双线解决方案显然不是世界末日,但我一直在寻找编写更漂亮代码的方法.

有谁知道更好的方法吗?

shm*_*mup 12

现在可以在C#7中使用它:

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

(var first, var last) = FullName();
Run Code Online (Sandbox Code Playgroud)

您甚至可以使用单个var声明:

var (first, last) = FullName();
Run Code Online (Sandbox Code Playgroud)

更多关于官方文档中的元组解构.


Ond*_*cny 5

有效至C#6:

不,这是不可能的。C#中没有这种语言功能。

如果您认为以下代码:

string firstValue = tupleWithTwoValues.Item1;
string secondValue = tupleWithTwoValues.Item2;
Run Code Online (Sandbox Code Playgroud)

很难看,那么您首先应该重新考虑使用元组。


更新:从C#7开始,元组解构现在成为可能。请参阅文档以获取更多信息。

参见贾里德的答案

  • 真正。发布该消息仅几秒钟后,令我震惊的是,每当我考虑使用元组时,通常都会采用更丰富的解决方案(例如DTO)。 (2认同)
  • @Jared感谢您指出这一点。更新了我的答案,尽管早在2014年该语言功能就不存在。 (2认同)