2011-02-24 60 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

相关问题