0


セクションA、B、C、Dの例など、複数のセクションを持つフォームと、それらを保存するための1つの送信ボタンがあります。私の顧客は、ユーザーが [送信] ボタンをクリックしたときのアクションに基づいて、さまざまな成功メッセージを表示することを求めています。

1) ユーザーが A と C を変更すると、成功メッセージは「A と C が保存されました」となるはずです。
2) ユーザーが A、C、および D を変更すると、成功メッセージは「A、C、および D が保存されました」となるはずです。

そして、それはそのようになります。
現時点では、多くの if および else 条件があります。ユーザーによって変更されたかどうかにかかわらず、各セクションをチェックし、bool 変数を true または false に設定しました。これらの bool 変数に基づいて、成功メッセージを生成します。

正常に動作しますが、if 条件と else 条件がたくさんあるのは好きではありません。だから、あなたの考えを聞きたかったのです。この問題にもっとエレガントな方法で対処するにはどうすればよいですか。将来、別のセクションを追加するとしましょう。これらすべての if、else 条件を通過したくありません。

何かアドバイス?

4

1 に答える 1

1

以下を設定できます。

Dictionary<string,bool> responses = new Dictionary<string,bool>();

ここで、キーは「A」、「B」、「C」などです。
セクションをチェックするときは、各応答/キーに対して true/false を設定するだけです。
次に、ヘルパー メソッドを使用して文字をカンマと「and」単語で結合できます。

static string MyJoin(Dictionary<string,bool> dict)
        {
            var dictTrue = dict.Where(e=>e.Value);
            if(dictTrue.Count()==0) return string.Empty;
            StringBuilder sb = new StringBuilder();
            sb.Append(string.Join(", ",dictTrue.Select(e=>e.Key).Take(dictTrue.Count()-1)));
            sb.Append(" and ");
            sb.Append(dictTrue.Last().Key);
            return sb.ToString();
        }
于 2013-07-04T10:06:53.820 に答える