2011-02-24 46 views
0

說我有有三串屬性的類:如何獲得在C#中的字符串屬性的參考

public class Foo 
{ 
    public string Bar1 { get; set; } 
    public string Bar2 { get; set; } 
    public string Bar3 { get; set; } 
} 

現在說我要分配給字符串屬性之一,但是這三個我分配的屬性取決於某些條件。知道字符串被認爲是參考類型,我可能會試圖寫這樣的代碼:

string someString; 
if (condition1) someString = foo.Bar1; 
else if (condition2) someString = foo.Bar2; 
else if (condition3) someString = foo.Bar3; 
someString = "I can't do that, Dave."; 

這是行不通的。我知道這與字符串不可變性有關(至少我認爲它確實如此),但我不知道如何去做。

字符串基本上混淆了bejesus在我之外。

恩,是的,所以我的問題是什麼是最簡潔的方式來做到這一點?

+2

的問題說:「現在說我要分配*到*字符串屬性之一」,但你可以清晰地從*屬性來someString分配*,不是*爲*的屬性。 – Greg 2011-02-24 22:34:19

+0

因爲在代碼的最後一行之前沒有'else','someString'將在代碼塊執行後總是包含文本''我不能這樣做,Dave。「'。 – kbrimington 2011-02-24 22:35:29

+0

我看不出任何原因,除非你總是以someString等於「我做不到,Dave」。因爲你錯過了最後一個人:) – 2011-02-24 22:36:19

回答

2

個人而言,我很可能只是繼續前進,分配屬性:

string value = "I can't do that, Dave."; 
if (condition1) foo.Bar1 = value; 
else if (condition2) foo.Bar2 = value; 
else if (condition3) foo.Bar3 = value; 

如果你真的想用你建議的方法,你可以在一個委託包裹它,我想:

Action<string> assignString; 
if (condition1) assignString = s => foo.Bar1 = s; 
else if (condition2) assignString = s => foo.Bar2 = s; 
else if (condition3) assignString = s => foo.Bar3 = s; 
assignString("I can't do that, Dave."); 

...但在這種情況下,這隻會使事情變得不必要的複雜。對於問題中描述的那種場景,我想不出有什麼理由想要這樣做。

+0

感謝拼寫檢查@spender :-) – 2011-02-24 22:44:54

+0

你是對的。我試圖做一些不必要的複雜事情。但是如果一個字符串是一個引用類型,就像一個類一樣,那麼它就完全可以工作......我想。 – David 2011-02-24 22:48:09

0

你總是可以做到這一點是這樣的:

EDITED **

VAR someString =(條件1)? foo.Bar1:(condition2)? foo.Bar2:(condition3)?第3欄:「我不能那樣做戴夫」;

讓我知道你是怎麼去的。

+1

這是破碎的代碼。這是'條件trueVal:falseVal'不'條件:.. ..'如果你因此它不會調用一個水平滾動條格式化你的代碼,它更容易閱讀? – spender 2011-02-24 22:39:49

+0

這個答案也是基於對我的問題的誤解(我承擔責任)。請在這個問題下看到我的意見。 – David 2011-02-24 22:44:02

+1

我會與我的團隊中編寫該代碼的任何人進行一次小小的戰鬥。 – 2011-02-24 22:46:41

2

只要做到這一點是這樣的:

string someString = "I can't do that, Dave."; 
if (condition1) foo.Bar1 = someString; 
else if (condition2) foo.Bar2 = someString; 
else if (condition3) foo.Bar3 = someString; 

C#試圖使字符串儘可能容易的工作。它們是原始類型,所以你不必擔心可變性,內存或地址或類似的東西。

+0

正確。有可能使用一些反射魔法來獲取要分配屬性的PropertyInfo對象;然而,這個解決方案既簡單又明確。 – kbrimington 2011-02-24 22:43:41

相關問題