C# 一个参数不起作用的解构

C# 一个参数不起作用的解构,c#,c#-7.0,C#,C# 7.0,我有一个班人: 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

我有一个班

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();

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

否则,表达式
(id)=new Person()
将在正常赋值和解构赋值之间不明确

您还可以从代码给出的其他编译器错误中看到这一点:
语法错误,“,”预期的

这是

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

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

从概念上讲,一个元素的元组就是一个元素(不需要元组来保存它)。所以没有元组语法(使用括号表示法)来促进这一点(更不用说它在语法上是不明确的)。解构主义也是如此

以下是我能找到的最相关的LDM注释:(零和一元素元组和解构)


在未来的一些递归模式场景中,这种解构可能是允许的,但还没有最终确定。

理解,也许以后,编译器会在使用一个参数创建它时向您提供建议,而不是在使用它时。@JosbelLuna:
解构()没有什么问题
一个参数的方法;它不能与解构语法一起使用。