【问题标题】:Deconstruct with one parameter not working [duplicate]解构一个参数不起作用[重复]
【发布时间】:2017-08-23 19:01:57
【问题描述】:

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

【问题讨论】:

    标签: c# c#-7.0


    【解决方案1】:

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

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

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

    【讨论】:

    • 明白了,也许以后,编译器会在用一个参数创建它时告诉你,而不是在使用它时。
    • @JosbelLuna:Deconstruct() 方法只有一个参数没有错;它不能与解构语法一起使用。
    【解决方案2】:

    这是this question的副本

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-24
      • 2015-07-23
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 2012-03-07
      相关资源
      最近更新 更多