初始化时指定属性

时间:2010-03-29 11:52:39

标签: c# constructor

void Foo()
{

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

}

是否可以在上面的代码中获取ID **的值?问题是它们都有相同的属性名称。

请忽略特定ID分配毫无意义的事实,我只是以它为例。

5 个答案:

答案 0 :(得分:1)

关于这一行的第一句话,它看起来很奇怪(将字符串分配给bool):

bool ID = "test";

第二句话,这很好用:

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

第三句话:C#中的一个约定是将本地变量命名为以小写字母开头。

答案 1 :(得分:1)

暂且不能编译代码...... 此语法中的第一个IDID=)指的是赋值,特别是指定的成员。在右侧,它归结为标准分辨率。哪个从不表示新对象的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'中进行,而不是在'对象初始化'期间。