void Foo()
{
string ID = "test";
var testctrl = new Control() {ID = (ID**!=null?ID**:ID)};
}
是否可以在上面的代码中获取ID **的值?问题是他们都有相同的属性名称。初始化时指定属性
请忽略具体的ID分配毫无意义的事实,我只是用它作为例子。
void Foo()
{
string ID = "test";
var testctrl = new Control() {ID = (ID**!=null?ID**:ID)};
}
是否可以在上面的代码中获取ID **的值?问题是他们都有相同的属性名称。初始化时指定属性
请忽略具体的ID分配毫无意义的事实,我只是用它作为例子。
暂且不论,代码不可能编译... 第一个ID
(ID=
)在该语法是指分配,特别是被分配的构件。在右侧,它归结为标准分辨率。其中从来没有意味着新对象的ID
。它将首先查看当前实例上的当前ID
变量,然后是该成员(字段等)。若要更喜欢当前实例的成员,请使用this.ID
。
您可能还想考虑空合并运算符,所以如果您的意思是“局部变量或实例成员,如果它为空,那将是ID ?? this.ID
- 但更好的想法是将明确的变量名;-p
问题不是很清楚,我,但你想这样的:
void Foo()
{
bool ID = "test";
var testctrl = new Control(){ID = (this.ID==null?ID:this.ID)};
}
笔记,未经测试。
您不能在变量初始值设定项中使用'this'关键字。 – 2010-03-29 12:01:05
是的,他想做类似的事情(不是你写的东西),这是不可能的(即你的代码不工作)。 – 2010-03-29 12:01:13
谢谢,不知道它会做什么(除了OP问题中的明显错误) – 2010-03-29 12:03:30
关于此行的第一句话,它看起来很奇怪(指定字符串布尔):
bool ID = "test";
第二句话,这工作得很好:
string ID = "test";
var testctrl = new Control(){ ID = (ID==null?ID:ID) };
三句话:它是在C#中的约定命名您的本地变量以小写字母开头。
我的不好,我重写了太多次的代码。 – maxp 2010-03-29 12:05:03
如果你想检查是否新的控件ID为空,那么你应该这样做。
void Foo()
{
string ID = "test";
var testctrl = new Control();
if(testctrl.ID==null)
testctrl.ID = ID;
}
看到你的榜样,我怀疑你没有要求,即该ID应该是唯一的? 通常,为了避免这样的讨厌问题,请避免尝试使用重复的属性名称,但也许你绑定到一个现有的接口。
如何添加一个构造函数重载,它将'外部'ID作为参数?
void Foo()
{
string ID = "test";
var testctrl = new Control(ID);
}
我认为在一般情况下,如果物业所做的不仅仅是分配更多(的说法在这种情况下检查),你应该这样做在“对象初始化”期间的财产本身,而不是“设置”。
bool ID =“test”; ????如果您发布尽可能接近工作的代码,它可能会有所帮助。 – 2010-03-29 11:56:37
目前尚不清楚你想要做什么。如果您使用更常规的“id”本地变量名称,您会遇到任何问题吗? – 2010-03-29 11:57:31