解构赋值 – C#中变量的对象属性

JavaScript有一个很棒的function,您可以使用一条简洁的线条从对象的属性中分配多个变量。 它被称为在ES6中添加的解构赋值语法。

// New object var o = {p1:'foo', p2:'bar', p3: 'baz'}; // Destructure var {p1, p2} = o; // Use the variables... console.log(p1.toUpperCase()); // FOO console.log(p2.toUpperCase()); // BAR 

我想用C#做类似的事情。

 // New anonymous object var o = new {p1="foo", p2="bar", p3="baz"}; // Destructure (wrong syntax as of C#6) var {p1, p2} = o; // Use the variables... Console.WriteLine(p1.ToUpper()); // FOO Console.WriteLine(p2.ToUpper()); // BAR 

有没有在C#中执行此操作的语法?

可以帮助你的最近的东西是元组。

C#7可能会有这样的东西:

 public (int sum, int count) Tally(IEnumerable values) { var res = (sum: 0, count: 0); // infer tuple type from names and values foreach (var value in values) { res.sum += value; res.count++; } return res; } (var sum, var count) = Tally(myValues); // deconstruct result Console.WriteLine($"Sum: {sum}, count: {count}"); 

链接到讨论

现在这是不可能的。

C#6有很多新的酷语法function,但不幸的是不支持你的问题中描述的解构 – https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6