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

3
假设我有一个简单的类,用于加法操作:
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属性来访问结果。
(可能有更好的方法来完成这个模板;想到了延迟加载。如果您想建议更好的模板,请提出来,但这不是我的问题的目的;它只是一个简单的例子,说明了我的问题。)
这是我的问题:
如果我正在使用对象初始化语法:
Multiply m = new Multiplier()
{
   A = 1,
   B = 2,
   C = 3
}

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

有没有一种方法可以在m初始化的一部分中执行Calculate()
2个回答

5
使Result成为只读属性并将Calculate逻辑移至其内部。
但是,不能用初始化器语法来调用方法。否则,它就不再是初始化器语法,而是某种替代的C#语法。

我正要发布相同的答案。 - Joseph Yaduvanshi

1

据我所知,没有这样的功能...

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

编辑:

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

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


而且你花了4分钟才发布那个答案?至少在写重复答案之前先检查一下,这会让人很快厌烦的。 - mellamokb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接