在某些语言(例如PHP,Haskell或Scala)中,您可以使用类似于以下伪代码的方式从元组中分配多个变量:
list(string value1, string value2) = tupleWithTwoValues;
我无法在C#中找到这样做的方法,但是,如果不写更长的,更丑陋的代码:
string firstValue = tupleWithTwoValues.Item1;
string secondValue = tupleWithTwoValues.Item2;
这个双线解决方案显然不是世界末日,但我一直在寻找编写更漂亮代码的方法。
有谁知道更好的方法吗?
答案 0 :(得分:7)
现在可以在C#7中找到它:
public (string first, string last) FullName()
{
return ("Rince", "Wind");
}
(var first, var last) = FullName();
您甚至可以使用单个var声明:
var (first, last) = FullName();
更多关于official documentation中的元组解构。
答案 1 :(得分:4)
有效至C#6:
不,这是不可能的。 C#中没有这样的语言功能。
如果您认为以下代码:
string firstValue = tupleWithTwoValues.Item1;
string secondValue = tupleWithTwoValues.Item2;
很难看,那么你应该首先重新考虑使用元组。
更新:从C#7开始,现在可以进行元组解构。有关详细信息,请参阅documentation。
同样见Jared的answer。
答案 2 :(得分:3)
虽然字符数几乎相同,但您可以使用以下语法在单个语句而不是两个语句中执行此操作。
string firstValue = tupleWithTwoValues.Item1
, secondValue = tupleWithTwoValues.Item2;
答案 3 :(得分:1)
答案 4 :(得分:0)
说到列表,你可以这样做:
var list = new List<string>{tuple.Item1, tuple.Item2};
(这不是那么罗嗦) 但对于多个变量,没有。你不能这样做。
答案 5 :(得分:0)
这就是我的所作所为:
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
});
答案 6 :(得分:0)
是的,可以在C#中使用。 您需要在项目中安装Value.Tuple包。 你可以这样做
List<Tuple<string,string>>() lstTuple = GetYourTupleValue();
foreach(var item in lstTuple)
{
(string Value1, string Value2 ) = item;
}
Console.WriteLine(item.Value1);