2017-01-30 47 views
7

在C#7.0我可以聲明如下deconstructors我的課:是否有可能在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; 
    } 
} 

我想用我們的變量在desconstructor而不是直接返回一個元組的想法是這樣,你可以有解構的不同的重載。但是,我似乎無法將對象解構爲三個變量。我只能將其解構爲兩個變量。

例如,這並不編譯:

(string firstName, string lastName, string company) = customer; 

而且我得到這個錯誤:「不能解構‘2’的元素融入到‘3’變量的元組」

但這並工作:

(string firstName, string lastName) = customer; 

我缺少什麼?

+1

可以重載的'Deconstruct'方法與不同數量的參數和不同的類型。 –

+6

當你說「這不能編譯...但是這樣做」,有什麼區別?這兩段代碼看起來和我完全一樣。 –

+1

如果這是真正的代碼,這將有所幫助 - 除非你的問題只是你的'Deconstruct'方法使用了錯誤的名稱? –

回答

3

你叫你的方法,Deconstructor,而不是Deconstruct。此外,您不能在兩個元組中重新聲明firstNamelastName。使這些變化,下面的代碼行中的所有編譯就好了:

var customer = new Customer("a", "b"); 
(string firstName1, string lastName1, string company) = customer; 
(string firstName2, string lastName2) = customer; 
+1

因此,由於他說他有編譯器錯誤,所以必須有更多的錯誤。 –

+2

@ LasseV.Karlsen,他聲稱'(string firstName,string lastName)= customer;'編譯沒有任何意義;它不會像目前的代碼那樣編譯。如果方法改爲「解構」,然後編譯。 –

+0

你是對的。首先,我錯誤地將解構方法稱爲方法。但是,我試圖解構的客戶來自外部服務(只是一個演示),實際上這個服務返回一個元組。我認爲它正在返回一個Customer對象,並試圖解構它。 –

相關問題