2012-12-27 50 views
0

可能重複:
How can I return multiple values from a function in C#?返回從一個類的屬性2倍的值

想象我們有得到像10-1685一個值的屬性,我想裏面添加其他財產返回這兩個值作爲單獨values.How一類我可以做到這一點?到字符串數組

public string UserName { get; set; } 



    public string UserNameSeparated 
    { 
     get { Username.Split('-'); 
     } 
     set 
     { 
      ...What do do here?? 
     } 
    } 
+1

爲什麼不創建一個具有2個屬性的類或結構來表示您的數據? –

+0

因爲我從數據庫獲取數據和值存儲爲X-Y和我已經將它們分配給類。 – Sin5k4

回答

3

改變返回類型的屬性:

public string UserName { get; set; } 

public string[] UserNameSeparated 
{ 
    get { Username.Split('-'); } 
    set 
    { 
     UserName = String.Join("-", value); 
    } 
} 

用法:

foo.UserName = "10-1685"; 
string[] names = foo.UserNameSeparated; 
// names[0] = "10"; 
// names[1] = "1685"; 
foo.UserNameSeparated = new string[] { "15", "42" }; 
// foo.UserName = "15-42" 

但考慮到有名字的兩個部分的性能。你將能夠在任何時間計算的全名,你會處理不錯命名屬性,而不是元組或數組索引(支持地獄):

public string FirstName { get; set; } 
public string LastName { get; set; } 

public string UserName 
{ 
    get { return String.Format("{0}-{1}", FirstName, LastName); } 
    set 
    { 
     // check if value format valid 
     var names = value.Split('-'); 
     FirstName = names[0]; 
     LastName = names[1]; 
    } 
} 

只是比較(你可以給更多的描述性的名稱,這說明您的數據越好):

foo.FirstName 
foo.LastName 

有了:

foo.UserNameSeparated.Item1 
foo.UserNameSeparated.Item2 
3

你可以使用一個元組。

的問題以前在這裏得到解答:How can I return multiple values from a function in C#?

+1

我覺得我錯過了一些明顯的東西,但是......爲什麼要這樣做,而不是僅僅創建一個具有兩個屬性的類或結構? –

+1

@BrandonMoore同意。從未在我的代碼中使用過元組。非常不具描述性的數據類型。創建具有兩個屬性的類需要大約10秒鐘的時間。 –

+0

是的,具有兩個屬性的類是另一個可行的解決方案,如上面的鏈接所示。 – Jamie

0

在後傑米引用,有一個職位的引用,一個是基於:Returning multiple values from a C++ function

的「流行」的答案有使用一個簡單的例子。然而,你應該注意的比爾·K,弗雷德·拉森,以及喬納森·萊弗勒的答案,所有指出的更好的方式來實現這一目標是使用一類或結構。

也要看微軟如何構造自己的代碼在.NET Framework。我從來沒有見過他們使用touple作爲任何東西的返回值。我認爲這是一個很好的跡象,表明哪種做法更好。