用一个参数解构不起作用
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(零和一元素元组和解构)。
在未来的某些递归模式场景中,这种解构可能会被允许,但尚未最终确定。
我有 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(零和一元素元组和解构)。
在未来的某些递归模式场景中,这种解构可能会被允许,但尚未最终确定。