用c#构造一个类并引用self

时间:2013-07-10 12:50:19

标签: c#

这可能是倒数第二行吗? 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的最有效方法。

5 个答案:

答案 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(); } }
}

您只需设置ABC将根据其他两个“自行”出现。根据需要添加空检查和错误处理。事实上,在此示例中根本无法设置C,并且它是正确的,因为它的值依赖于另一个属性(此处为A)。

答案 4 :(得分:0)

您正在使用的对象初始化程序语法只是分配值的快捷方式,因此您可以这样做:

Thing myThing = new Thing() {
    A = 1,
    B = 2};
myThing.C =myThing.A + myThing.B;