C#なのですが、switchを使う際に条件を複数定義することは可能でしょうか?
例
switch(a,b)
{
case 1,0:
break;
}
みたいな形にできるのであれば教えていただきたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
switch 文で使えるのは整数値と文字列だけです。次のような形でどうでしょうか?
C#
1int a = 0; 2int b = 1; 3string s = string.Format("{0} {1}", a, b); 4switch (s) 5{ 6 case "0 1": 7 break; 8}
投稿2017/02/22 06:09
総合スコア28660
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/22 06:19
2017/02/22 06:26
2017/02/22 06:46 編集
2017/02/22 06:45
0
a,bを一つの値に合体させて判定するという若干トリッキーな方法ならあります。
c#
1long ab = ((long)a << 32) | (uint32)b; 2switch (ab) { 3case (1L << 32) | 0: 4 // a==1, b==0 5 処理 6 break; 7case (1L << 32) | 1: 8 // a==1, b==1 9 処理 10 break; 11 ... 12}
上の例ではa,bの値の範囲を限定しない場合です。32bitシフトするのはなんとなくいやなので値のビット数が小さければ必要な分だけのシフトにしたくなるかも知れません。例えばaが-100~100,bが0~7までの値しか持たないなら
int ab = (a << 3) | b;
でもよいわけです。
ボトルネック箇所で最適化したいとか、組み合わせの数が多数あるといった場合は使う気になる場合があるかも知れませんが、論理が不明瞭に(そしてバグが入り込みやすく)なるる気がするため個人的にはあまり積極的には使いたくないです。
投稿2017/02/22 06:23
総合スコア18394
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
パターンマッチングのことかと思いますが、
今のC#(6)ではできません。
C#にもそのうちパターンマッチングが導入される予定(ただしC#7より後)らしいので
それまで待つか
同じ.NET系言語のF#使うかです。
現実から逃げずに戦うとすると、
switchをやめるとか
switchで使える型にうまい事変換することです。(他の方が回答してくださってますね)
投稿2017/02/22 06:17
編集2017/02/22 06:55総合スコア13521
0
できないと思います。
構文:
switch (式){
case 定数1:
// 略
}
これがコンパイルされると、
if (式 == 定数1) {}になるので、if (a, b == 定数1)はありえないかと。
投稿2017/02/22 06:11
総合スコア801
0
❝caseラベルが連続している場合のみフォールスルーが許可されている❞のを利用して、下記のようにしたらご期待の動作になりませんでしょうか?
switch(a,b) { case 1: case 0: 目的の処理 break; }
投稿2017/02/22 06:08
総合スコア22
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/22 06:21
2017/02/22 06:24
2017/02/22 06:30
2017/02/22 06:31
2017/02/22 06:34
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。