Eliminating Ifs

本文关键字:Ifs Eliminating | 更新日期: 2023-09-27 18:21:13

我想在我的应用程序中消除if,但我遇到了困难。这是我的密码。我面临的问题是,我接受了使用字典进行切换的想法,然而,在这种情况下,if取决于两个不同的变量,加权和bee(我不能将它们组合成一个变量)。所以最初是

if(weighted)
    return WeightedCalculator;
else if (bee)
    return BeeCalculator;
else
    return DefaultCalculator;

所以我把它改成了下面的,去掉了if,但感觉不对。我知道字典是为if在单个变量上的情况而设计的,但我觉得如果有2个或更多的变量,就必须有一种使用方法。任何关于我如何以一种干净的方式消除如果的想法。这是这个"模式"的链接

http://joelabrahamsson.com/invoking-methods-based-on-a-parameter-without-if-else-statements-in-c/

public class CalculateDayCountFractionFactory : ICalculateDayCountFractionFactory
{
    private static readonly Dictionary<string, Func<ICalculateDayCount>> _dayCountCalculators = new Dictionary<string, Func<ICalculateDayCount>>
                                                                                                    {
                                                                                                        {"weighted", new WeightedDayCountCalculator()},
                                                                                                        {"bee", new BeeDayCountCalculator()}
                                                                                                    };

    public ICalculateDayCount Create(bool weighted, bool bee)
    {
        var key = weighted
                      ? "weighted"
                      : (bee
                             ? "bee"
                             : "");

        return _dayCountCalculators.ContainsKey(key)
                   ? _dayCountCalculators[key]()
                   : DefaultDayCountCalculator();
    }
}

Eliminating Ifs

这里不需要字典。。。只需以现有的方式使用条件运算符,但要在return语句中使用。就我个人而言,我喜欢以下格式化方式。

return weighted ? WeightedCalculator
     : bee ? BeeCalculator
     : DefaultCalculator;

您可以在最终默认值之前添加任意数量的: condition ? result行。