C#:使用对象初始化程序语法执行条件

时间:2011-02-23 05:01:04

标签: c# constructor

假设我有一个简单的类Adds:

public class Multiply
{
     public int A {get; set;}
     public int B {get; set;}
     public int C {get; set;}

     public List<int> Result {get; set;}

     public void Calculate()
     {
         if (A != 0 && B!= 0 && C != 0)
         {
           Result.Add(A);
           Result.Add(B);
           Result.Add(C);
           Result.Add(A * B);
           Result.Add(A * C);
           Result.Add(B * C);
           Result.Add(A * B * C);
         }
     }
}

以上课程模拟了我的实际应用。我有一系列设置的参数,在本例中为A,B和C.然后我执行Calculate并使用Multiply对象的Result属性来访问结果。

(可能有更好的方法来完成这个模板;想到延迟加载。如果你想建议一个更好的模板,那就不是我的问题的目的;它只是一个简单的例子来说明我的问题。)

这是我的问题:

如果我正在使用Object Intializer语法:

Multiply m = new Multiplier()
{
   A = 1,
   B = 2,
   C = 3
}

m.Calculate();
DoSomething(m.Result[5]); //DoSomething(6); 

有没有办法在Calculate()初始化中执行m

2 个答案:

答案 0 :(得分:5)

使结果成为只读属性并将计算逻辑移动到它。

但不,你不能用初始化语法调用方法。然后它不会是初始化语法,它只是一些替代的C#语法。

答案 1 :(得分:1)

据我所知......

但是:你可以在Result的getter中进行计算。

编辑:

由于有人已经发布了这个,你也可以强制参数进入你的构造函数,而不是使用初始化块。

这实际上更好,因为你正在缓存结果。代码的工作方式,您可以随时更改A,B和C,但缓存的值不会更改。通过封装这些属性并仅将它们放在构造函数中,可以防止对象陷入不一致状态,并且可以在构造函数中放置所需的任何代码。