【发布时间】:2017-06-15 09:59:50
【问题描述】:
在 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;
}
}
我想在解构器中使用我们的变量而不是直接返回一个元组的想法是这样你就可以有不同的解构器重载。但是,我似乎无法将对象解构为三个变量。我只能将其解构为两个变量。
例如,这不会编译:
(string firstName, string lastName, string company) = customer;
我得到这个错误:
“不能将 '2' 个元素的元组解构为 '3' 个变量。”
但这确实有效:
(string firstName, string lastName) = customer;
我错过了什么?
【问题讨论】:
-
可以重载
Deconstruct方法,参数数量不同,类型不同。 -
当你说“这不编译......但是这个”,有什么区别?这两段代码与我看起来 100% 相同。
-
如果这是真正的代码会有所帮助 - 除非您的问题只是您为
Deconstruct方法使用了错误的名称? -
另外,你可能会告诉代码没有编译时抛出的错误
-
如果您将方法命名为
Deconstruct而不是Deconstructor,则代码编译,如果您使用错误的名称保留它们,您收到的错误消息与您提到的关于 a 的错误消息不同元组。再次,请发帖minimal reproducible example。
标签: c# visual-studio-2017 c#-7.0