1

可能是倒数第二行吗?IE 指的是声明本身中的其他属性?

在我的实际代码中,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

4

5 回答 5

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

所以不行; 这不可能。请改用其他任何答案。

于 2013-07-10T12:58:23.763 回答
1

遗憾的是,无法在对象的初始化程序中检索属性的值。

于 2013-07-10T13:03:01.460 回答
1

我认为 A 和 B 在您可以引用它们以在 C 中使用之前不会被更新。我认为的解决方案是在创建对象之前简单地将 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 的那些值

于 2013-07-10T13:03:40.337 回答
0

救援属性(基于您的示例)

class Thing {
    public IEnumerable<someType> A { get; set; }
    public IEnumerable<someType> B { get; set; }
    public int C { get { return A.Count(); } }
}

您只需要设置Aand B,C就会基于其他两个“自行”出来。根据需要添加空检查和错误处理。实际上,C在这个示例中根本无法设置,并且它是正确的,因为它的值取决于另一个属性(这里是A)。

于 2013-07-10T12:57:15.377 回答
0

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

Thing myThing = new Thing() {
    A = 1,
    B = 2};
myThing.C =myThing.A + myThing.B;
于 2013-07-10T12:57:28.883 回答