void Foo()
{
string ID = "test";
var testctrl = new Control() {ID = (ID**!=null?ID**:ID)};
}
是否可以在上面的代码中获取ID **的值?问题是它们都有相同的属性名称。
请忽略特定ID分配毫无意义的事实,我只是以它为例。
答案 0 :(得分:1)
关于这一行的第一句话,它看起来很奇怪(将字符串分配给bool):
bool ID = "test";
第二句话,这很好用:
string ID = "test";
var testctrl = new Control(){ ID = (ID==null?ID:ID) };
第三句话:C#中的一个约定是将本地变量命名为以小写字母开头。
答案 1 :(得分:1)
暂且不能编译代码......
此语法中的第一个ID
(ID=
)指的是赋值,特别是指定的成员。在右侧,它归结为标准分辨率。哪个从不表示新对象的ID
。它将首先查看本地ID
变量,然后查看当前实例上的成员(字段等)。要在当前实例上首选成员,请使用this.ID
。
你可能还想考虑null-coalescing运算符,所以如果你的意思是“局部变量,或者实例成员,如果它是null,那将是ID ?? this.ID
- 但更好的想法是是制作明确的变量名;-p
答案 2 :(得分:1)
如果你想检查新的控件id是否为null,那么你应该这样做。
void Foo()
{
string ID = "test";
var testctrl = new Control();
if(testctrl.ID==null)
testctrl.ID = ID;
}
答案 3 :(得分:0)
这个问题对我来说不是很清楚,但是你想要这个:
void Foo()
{
bool ID = "test";
var testctrl = new Control(){ID = (this.ID==null?ID:this.ID)};
}
注意,未经测试。
答案 4 :(得分:0)
看到你的例子,我怀疑你没有要求ID应该是唯一的? 一般来说,为了避免这样的令人讨厌的问题,请避免尝试使用重复的属性名称,但可能绑定到现有的接口。
如何添加一个以'外部'ID作为参数的构造函数重载?
void Foo()
{
string ID = "test";
var testctrl = new Control(ID);
}
我认为一般来说,如果属性不仅仅是赋值(在这种情况下是参数检查),你应该在属性本身的'set'中进行,而不是在'对象初始化'期间。