这可能是倒数第二行吗? I.E.引用声明中的其他属性?
在我的实际代码中,A和B设置为复杂的LINQ Enumerables(很好),C可能类似于A.Count():
class Thing {
public int A;
public int B;
public int C;
}
Thing myThing = new Thing() {
A = 1,
B = 2,
C = A+B
}
试图找到构建myThing
的最有效方法。
答案 0 :(得分:1)
考虑这个例子:
int A = 0;
int B = 0;
int C = 0;
MyThing myThing = new MyThing() {
A = 1,
B = 2,
C = A + B
}
// myThing.A == 1
// myThing.B == 2
// myThing.C == 0
所以,不;这不可能。改为使用任何其他答案。
答案 1 :(得分:1)
遗憾的是,无法在对象的初始值设定项中检索属性值。
答案 2 :(得分:1)
我不认为A和B会在你引用它们用于C之前更新。我的解决方案是在创建Object之前简单地将A和B分配给变量:
var variable1 = 1
var variable2 = 2
Thing myThing = new Thing() {
A = variable1,
B = variable2,
C = variable1+variable2
}
通过这种方式,您可以确保在将它们用于C
之前更改这两个变量编辑:“在初始化对象后,我别无选择,只能定义属性C?” 问题是A和B尚未初始化,因此您无法使用它们来创建C.但是如果您使用其他名称(上例中的变量1和变量2)初始化它们,则可以继续使用那些值得到C
答案 3 :(得分:0)
拯救的属性(基于您的示例)
class Thing {
public IEnumerable<someType> A { get; set; }
public IEnumerable<someType> B { get; set; }
public int C { get { return A.Count(); } }
}
您只需设置A
和B
,C
将根据其他两个“自行”出现。根据需要添加空检查和错误处理。事实上,在此示例中根本无法设置C
,并且它是正确的,因为它的值依赖于另一个属性(此处为A
)。
答案 4 :(得分:0)
您正在使用的对象初始化程序语法只是分配值的快捷方式,因此您可以这样做:
Thing myThing = new Thing() {
A = 1,
B = 2};
myThing.C =myThing.A + myThing.B;