首页
学习
活动
专区
圈层
工具
发布

消除Ifs
EN

Stack Overflow用户
提问于 2013-07-05 17:10:55
回答 1查看 378关注 0票数 0

我想在我的应用程序中去掉i,但是我遇到了一个难题。这是我的代码。我面临的问题是,我接受了使用字典进行切换的想法,然而,在这种情况下,is依赖于两个不同的变量,加权和bee(这两个变量我不能组合成一个变量)。所以它最初是

代码语言:javascript
复制
if(weighted)
    return WeightedCalculator;
else if (bee)
    return BeeCalculator;
else
    return DefaultCalculator;

因此,我将其更改为以下代码,这样可以消除if,但感觉是错误的。我确实知道这个字典是为if是针对单个变量的情况而设计的,但我觉得如果有2个或更多的变量,必须有一种使用它的方法。关于我如何以一种干净的方式消除in的任何想法。下面是这个“模式”的链接

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

代码语言:javascript
复制
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();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-05 17:13:59

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

代码语言:javascript
复制
return weighted ? WeightedCalculator
     : bee ? BeeCalculator
     : DefaultCalculator;

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17485182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档