ある条件下でのみif文に含まれる処理をすべて実行したい


私は C# の初心者です。この質問は初歩的なものですが、私にとっては難しいです。

if 文を使用して条件分岐を実行しています。 しかし、ある条件下で、そのif文に含まれる処理をすべて実行したいと考えています。  
私のプログラムには if 文がたくさんありますが、これは賢い書き方とは思えません。  
「a」の記述が冗長なので、どちらかの if 文に「a」の条件を入れ忘れる可能性があります。

処理Bと処理Cを重複させずに、「a」の場合のすべての処理を実行する賢い方法はありますか？

[code]

    if (a || b)
    {
        Process B
    }
    if (a || c)
    {
        Process C
    }
    if (a || d)
    {
        Process D
    }
    
[/code]




配列などのデータ構造にまとめて扱うのが良いと思います。

例:

[code]

    // 私はC#ユーザーでは無いので、これは慣用的なC#コードではないかも知れません
    
    var a = false;
    var b = true;
    var c = true;
    var d = true;
    
    // 条件（ブール値）と処理内容（関数）のタプルを要素に持つ配列
    var processes = new (bool,  Action)[] {
        (b, () => Console.WriteLine("Process B")),
        (c, () => Console.WriteLine("Process C")),
        (d, () => Console.WriteLine("Process D")),
    };
    
    
    if (a) {
        // 全ての処理を実行
        // 条件部は利用しないので「_」で捨てる
        foreach (var (_, func) in processes) {
            func();
        }
    } else {
        // 条件部が真である処理を実行する
        foreach (var (cond, func) in processes) {
            if (cond) {
                func();
            }
        }
    }
    
[/code]




> 「a」の記述が冗長なので、どちらかの if 文に「a」の条件を入れ忘れる可能性があります。

解決すべき課題が何なのかいまいちわからないのですが，  
問題視しているのが「冗長さ」ではなくて「書き忘れる可能性」なのだということであれば……

[code]

    //各処理を　使う情報を引数に取る　メソッドにする．
    void ProcessB( bool a, bool b ){ ... }
    void ProcessC( bool a, bool c ){ ... }
    void ProcessD( bool a, bool d ){ ... }
    
    //呼ぶ側
    void SomeFunc()
    {
      //必ず引数を２つ指定しないとコンパイル通らないから「書き忘れ」は無い．
      //（「書き間違い」ならばあり得るだろうけども）
      ProcessB( a, b );
      ProcessC( a, c );
      ProcessD( a, d );
    }
    
[/code]

のように，明示的に「 `a` と `b` を引数とするメソッド」といった形に書けばどうですか？  
さすがにこの状態で `{...}` の箇所の実装時に「`a` の存在を忘れて（というか無視して） `b`
だけ使うコードを書いちゃう」ということはそうそう無いのではないか，と思います．

