用一个参数解构不起作用

Deconstruct with one parameter not working

我有 class 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();

编译器说:

Cannot infer the type of implicitly-typed deconstructor variable 'id'.

当有多个参数时,编译器不会说。像这样:

public void Deconstruct(out int id, out string name) { id = Id; name = Name; }

var (id, name) = new Person();

解构至少需要解构两个变量。

否则,表达式(id) = new Person()在正常赋值和解构赋值之间会产生歧义。

您还可以从您的代码给出的其他编译器错误中看到这一点:Syntax error, ',' expected.

这是

的副本

C# 7.0 不支持解构为单个元素。

不清楚您为什么需要这种机制,因为您可以简单地访问 属性 或编写转换运算符来实现相同的目的。

从概念上讲,一个元素的元组就是那个元素(您不需要元组来保存它)。所以没有元组语法(使用括号表示法)来促进这一点(更不用说它在语法上会模棱两可)。这同样适用于解构。

以下是我能找到的最相关的 LDM 笔记:2017-03-15(零和一元素元组和解构)。

在未来的某些递归模式场景中,这种解构可能会被允许,但尚未最终确定。