2010-03-29 55 views
1
void Foo() 
{ 

string ID = "test"; 
var testctrl = new Control() {ID = (ID**!=null?ID**:ID)}; 

} 

是否可以在上面的代码中获取ID **的值?问题是他们都有相同的属性名称。初始化时指定属性

请忽略具体的ID分配毫无意义的事实,我只是用它作为例子。

+3

bool ID =“test”; ????如果您发布尽可能接近工作的代码,它可能会有所帮助。 – 2010-03-29 11:56:37

+0

目前尚不清楚你想要做什么。如果您使用更常规的“id”本地变量名称,您会遇到任何问题吗? – 2010-03-29 11:57:31

回答

1

暂且不论,代码不可能编译... 第一个IDID=)在该语法是指分配,特别是被分配的构件。在右侧,它归结为标准分辨率。其中从来没有意味着新对象的ID。它将首先查看当前实例上的当前ID变量,然后是该成员(字段等)。若要更喜欢当前实例的成员,请使用this.ID

您可能还想考虑空合并运算符,所以如果您的意思是“局部变量或实例成员,如果它为空,那将是ID ?? this.ID - 但更好的想法是将明确的变量名;-p

0

问题不是很清楚,我,但你想这样的:

void Foo() 
{ 

bool ID = "test"; 
var testctrl = new Control(){ID = (this.ID==null?ID:this.ID)}; 

} 

笔记,未经测试。

+0

您不能在变量初始值设定项中使用'this'关键字。 – 2010-03-29 12:01:05

+0

是的,他想做类似的事情(不是你写的东西),这是不可能的(即你的代码不工作)。 – 2010-03-29 12:01:13

+0

谢谢,不知道它会做什么(除了OP问题中的明显错误) – 2010-03-29 12:03:30

1

关于此行的第一句话,它看起来很奇怪(指定字符串布尔):

bool ID = "test"; 

第二句话,这工作得很好:

string ID = "test"; 
var testctrl = new Control(){ ID = (ID==null?ID:ID) }; 

三句话:它是在C#中的约定命名您的本地变量以小写字母开头。

+0

我的不好,我重写了太多次的代码。 – maxp 2010-03-29 12:05:03

1

如果你想检查是否新的控件ID为空,那么你应该这样做。

void Foo() 
{ 
    string ID = "test"; 
    var testctrl = new Control(); 
    if(testctrl.ID==null) 
     testctrl.ID = ID; 
} 
0

看到你的榜样,我怀疑你没有要求,即该ID应该是唯一的? 通常,为了避免这样的讨厌问题,请避免尝试使用重复的属性名称,但也许你绑定到一个现有的接口。

如何添加一个构造函数重载,它将'外部'ID作为参数?

void Foo() 
{ 

string ID = "test"; 
var testctrl = new Control(ID); 

} 

我认为在一般情况下,如果物业所做的不仅仅是分配更多(的说法在这种情况下检查),你应该这样做在“对象初始化”期间的财产本身,而不是“设置”。