2011-01-05 5 views
1

したがって、この場合はC# - 一回の実行で多くのケースに一致します

ユーザーはプロパティの文字列グループを指定できます。例:

DaysNeeded ="Sunday,Tuesday,Friday,Saturday"; 

実際のUIでは、チェックボックスとして曜日が使用できます。私は、ユーザーがプロパティを介してコードの背後に必要な日数を設定できるようにする方法を提供しようとしています。

今、私のクエリは、ユーザーが提供した特定のコードを実行するための最良の方法です。意味、DaysNeededプロパティは、日曜日、火曜日、金曜日、土曜日です。毎日実行されるコードがあります。私が毎週switch caseを持ってforloopを持っていなければならない場合、forループを実行しなければならないので、ユーザーが与えた日数が増えると思います。

ユーザーが与えて、それぞれのコード部分を実行したすべての日に一致する単一のコードを実行できる方法はありますか?

質問がわからない場合は教えてください。

+0

コードをどのように構築しても、何らかのループで実行されることになります。たぶんその明白ではないが、新しい* List (DaysNeeded.Split( '、'))。ForEach(d => dosomething(d))*カーテンの背後にはいくつかのループがあります。 –

答えて

4

ループを4回以上繰り返しても問題は起こりませんが、それは不要です。ところで

if (DaysNeeded.Contains("Sunday")) 
    DoSundayWork(); 

if (DaysNeeded.Contains("Tuesday")) 
    DoTuesdayWork(); 

if (DaysNeeded.Contains("Friday")) 
    DoFridayWork(); 

if (DaysNeeded.Contains("Saturday")) 
    DoSaturdayWork(); 

、それはおそらくあなたのDaysNeeded財産ではなく、カンマ区切りの文字列をFlagsenumを使用する方が理にかなって。

+0

私はこのコードに慣れています。ありがとう! – clklachu

+0

正解で+1、フラグenumで+仮想1。 – annakata

0

私はあなたの質問を完全に理解していませんが、休憩なしにswitch文を書くとうまくいきます。

switch(condition) 
{ 
    case "Monday": 
    ... 
    case "Tuesday": 
    ... 
} 
+0

C#はブレークまたはgotoを必要とします - 真のフォールスルーはなく、case文はconditionの結果と照合され、個別に条件が一致しません。一連の 'if'文が本当に唯一適切な方法ですが、それは完全に有効です。 – annakata

3
Dictionary<string, Action> actions = new Dictionary<string, Action>() { 
    {"Monday", e=> ...}, 
    ... 
    {"Sunday", e=> ...} 

} 

foreach (var day in actions.Keys) { 
if (DaysNeeded.Contains(day) { 
    actions[day].Invoke() 
} 
} 

たぶんそのような。

+0

あなたの答えをありがとう。学習者としては、辞書のアクションルックアップを使用することが、このシナリオを処理する費用効果の高い方法であるかどうかも知りたいですか?あなたの考えを分かち合う? – clklachu

+1

辞書ルックアップは実質的に無料ですが、ここでのコストはまだループがあり、まだ操作が含まれています。パフォーマンスが問題になるまでは、メンテナンスと読みやすさが必要とされる*正しさ*が優先されるべきであることを強調しておきます。マイクロ最適化しないでください。 – annakata

+0

+1が正しい。感謝のannakata。 – clklachu

関連する問題