0

アプリケーションで if を排除したいのですが、壁にぶち当たりました。これが私のコードです。私が直面している問題は、辞書を使用して切り替えを行うという考えを取り入れたことですが、この場合、if は 2 つの異なる変数、加重変数と蜂に依存します (これらは 1 つの変数に結合できません)。だからもともとそうだった

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

だから私はそれを次のように変更しました.ifsを排除しますが、気分が悪いです. 辞書はifが単一の変数にある場合を対象としていることは知っていますが、2つ以上の変数がある場合はそれを使用する方法が必要だと感じています。どうすればifをきれいに排除できるかについてのアイデア。これがこの「パターン」へのリンクです

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();
    }
}
4

1 に答える 1

2

ここでは辞書は必要ありません...既にある方法で条件演算子を使用するだけですが、return ステートメントで使用します。個人的には、次のフォーマット方法が好きです。

return weighted ? WeightedCalculator
     : bee ? BeeCalculator
     : DefaultCalculator;

: condition ? result最終的なデフォルト値の前に、好きなだけ行を追加できます。

于 2013-07-05T09:13:58.560 に答える