是否有可能在C#7.0中过载解构器?

Mil*_*hev 7 c# c#-7.0 visual-studio-2017

在C#7.0中,我可以为我的类声明以下解构器:

public class Customer
{
    public string FirstName { get; }
    public string LastName { get; }
    public string Email { get; }

    public Customer(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }

    public void Deconstructor(out string firstName, out string lastName, out string company)
    {
        firstName = FirstName;
        lastName = LastName;
        company = "Nop-Templates";
    }

    public void Deconstructor(out string firstName, out string lastName)
    {
        firstName = FirstName;
        lastName = LastName;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在desconstructor中使用我们的变量而不是直接返回一个元组的想法是这样你可以有解构函数的不同重载.但是,我似乎无法将对象解构为三个变量.我只能将它解构为两个变量.

例如,这不编译:

(string firstName, string lastName, string company) = customer;
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

"无法将'2'元素的元组解构为'3'变量."

但这确实有效:

(string firstName, string lastName) = customer;
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Dav*_*rno 3

您已将您的方法称为 ,Deconstructor而不是Deconstruct。另外,您不能在两个元组中重新声明firstNameand 。lastName进行这些更改,以下代码行都可以正常编译:

var customer = new Customer("a", "b");
(string firstName1, string lastName1, string company) = customer;
(string firstName2, string lastName2) = customer;
Run Code Online (Sandbox Code Playgroud)

  • @LasseV.Karlsen,他声称“(string firstName, string lastName) = customer;”编译毫无意义;它不能按照他当前的代码进行编译。如果方法更改为“Deconstruct”,则它可以编译。 (2认同)