我有班级Person
:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public void Deconstruct(out int id) { id = Id; }
}
当我尝试使用以下代码解构它时:
var (id) = new Person();
编译器说:
无法推断出隐含类型的解构变量' id'。
当有多个参数时,编译器不会说出来。像这样:
public void Deconstruct(out int id, out string name) { id = Id; name = Name; }
var (id, name) = new Person();
答案 0 :(得分:6)
解构需要至少两个变量来解构。
否则,表达式(id) = new Person()
在正常赋值和解构赋值之间将不明确。
您还可以从代码提供的其他编译器错误中看到这一点:Syntax error, ',' expected
。
答案 1 :(得分:3)
C#7.0不支持将解构转换为单个元素。
目前还不清楚为什么你需要这样一种机制,因为你可以简单地访问一个属性或编写一个转换操作符来实现同样的目的。
从概念上讲,一个元素的元组只是一个元素(你不需要一个元组来保存它)。所以没有元组语法(使用括号表示法)来促进这一点(更不用说它在语法上是模糊的)。这同样适用于解构。
以下是我能找到的最相关的LDM注释:2017-03-15(零和一个元素元组和解构)。
在未来的某些递归模式场景中,这种解构可能会被允许,但尚未最终确定。