タグ付けされた質問 「switch-statement」

コンピュータプログラミングでは、switch、case、select、またはinspectステートメントは、変数の内容に基づいてコードの特定のブロックを呼び出すために使用される一種の選択制御メカニズムです。

10
スイッチ/パターンマッチングのアイデア
私は最近F#を検討してきましたが、すぐにフェンスを飛び越えそうにありませんが、C#(またはライブラリのサポート)が生活を楽にする可能性のあるいくつかの領域をはっきりと強調しています。 特に、F#のパターンマッチング機能について考えています。これにより、非常に豊富な構文が可能になり、現在のスイッチ/条件付きC#の同等機能よりもはるかに表現力が豊かになります。私は直接的な例を挙げようとはしませんが(私のF#はそれまでではありません)、簡単に言えば次のことが可能です。 型による一致(識別された共用体の完全なカバレッジチェックを使用)[これにより、バインドされた変数の型も推測され、メンバーにアクセス権が与えられることに注意してください] 述語で一致 上記の組み合わせ(そしておそらく私が知らない他のいくつかのシナリオ) C#がこの豊富さの一部を最終的に借りるのは素晴らしいことですが、暫定的には、実行時に何ができるかを検討してきました。たとえば、いくつかのオブジェクトを組み合わせると、次のようになります。 var getRentPrice = new Switch<Vehicle, int>() .Case<Motorcycle>(bike => 100 + bike.Cylinders * 10) // "bike" here is typed as Motorcycle .Case<Bicycle>(30) // returns a constant .Case<Car>(car => car.EngineType == EngineType.Diesel, car => 220 + car.Doors * 20) .Case<Car>(car => car.EngineType == EngineType.Gasoline, car => …

5
落下する迅速なケース
迅速な発言は失敗ですか?たとえば、私が次のことをした場合 var testVar = "hello" var result = 0 switch(testVal) { case "one": result = 1 case "two": result = 1 default: result = 3 } ケース「1」と「2」で同じコードを実行することは可能ですか?

11
'where'句のSQLスイッチ/ケース
あちこち探してみたが、助けになるものが見つからなかった。 私はこれをSQLでやろうとしています: declare @locationType varchar(50); declare @locationID int; SELECT column1, column2 FROM viewWhatever WHERE CASE @locationType WHEN 'location' THEN account_location = @locationID WHEN 'area' THEN xxx_location_area = @locationID WHEN 'division' THEN xxx_location_division = @locationID それぞれの末尾に '= @locationID'を付ける必要がないことはわかっていますが、構文が正しくても正確に取得できません。SQLは最初のWHEN行の '='について文句を言い続けます... これどうやってするの?



17
C#switchステートメントの制限-なぜですか?
switchステートメントを記述する場合、caseステートメントでオンにできるものには2つの制限があるように見えます。 たとえば、(そして、はい、私が知っている、あなたがこの種のことをしているなら、それはおそらくあなたのオブジェクト指向(OO)アーキテクチャが不審であることを意味します-これは単なる不自然な例です!)、 Type t = typeof(int); switch (t) { case typeof(int): Console.WriteLine("int!"); break; case typeof(string): Console.WriteLine("string!"); break; default: Console.WriteLine("unknown!"); break; } ここで、switch()ステートメントは「整数型の値が必要です」で失敗し、caseステートメントは「定数値が必要です」で失敗します。 なぜこれらの制限が設けられているのですか、そして根本的な正当化は何ですか?switchステートメントが静的分析のみに屈する必要がある理由や、スイッチがオンになっている値が整数(つまり、プリミティブ)でなければならない理由はわかりません。正当化とは何ですか?


8
switch caseステートメントエラー:case式は定数式でなければなりません
私のswitch-caseステートメントは昨日完全にうまくいきます。しかし、今朝の早い段階でコードを実行すると、eclipseはcase文に赤色で下線を引くエラーを表示し、次のように言います。case式は定数式である必要があります。以下が私のコードです: public void onClick(View src) { switch(src.getId()) { case R.id.playbtn: checkwificonnection(); break; case R.id.stopbtn: Log.d(TAG, "onClick: stopping srvice"); Playbutton.setImageResource(R.drawable.playbtn1); Playbutton.setVisibility(0); //visible Stopbutton.setVisibility(4); //invisible stopService(new Intent(RakistaRadio.this,myservice.class)); clearstatusbar(); timer.cancel(); Title.setText(" "); Artist.setText(" "); break; case R.id.btnmenu: openOptionsMenu(); break; } } すべてのR.id.intにはすべて赤の下線が引かれています。

9
String switchステートメントがnullケースをサポートしないのはなぜですか?
Java 7 switchステートメントがnullケースをサポートせず、代わりにスローするのはNullPointerExceptionなぜですか。以下のコメント付きの行を参照してください(例については、Javaチュートリアルの記事switchから引用しています)。 { String month = null; switch (month) { case "january": monthNumber = 1; break; case "february": monthNumber = 2; break; case "march": monthNumber = 3; break; //case null: default: monthNumber = 0; break; } return monthNumber; } これにより、ifすべてのswitch使用前にnullチェックの条件が回避されます。


3
if(0)を使用して、動作するはずのスイッチのケースをスキップしていますか?
C ++のswitchステートメントの2つのケースで、両方とも3番目のケースに分類したいという状況があります。具体的には、2番目のケースは3番目のケースにフォールスルーし、最初のケースも2番目のケースを通過せずに3番目のケースにフォールスルーします。 私はばかげた考えを持っていて、それを試しました、そしてそれはうまくいきました!2番目のケースをif (0) {...で包みました}。次のようになります。 #ifdef __cplusplus # include <cstdio> #else # include <stdio.h> #endif int main(void) { for (int i = 0; i < 3; i++) { printf("%d: ", i); switch (i) { case 0: putchar('a'); // @fallthrough@ if (0) { // fall past all of case 1 (!) …

12
Switchステートメントのフォールスルー…許可されるべきか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。事実、参考文献、専門知識によって回答が裏付けられることを期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問が改善され、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 覚えている限り、switchステートメントのフォールスルーの使用は避けてきました。実際、switchステートメントのバグにすぎないということを、頭の中で掘り下げたため、可能なこととして意識の中に入るのを思い出すことはできません。しかし、今日、私はそれを仕様で使用するコードに出くわしました。そのため、コミュニティの誰もがswitchステートメントのフォールスルーについて何を考えているのかすぐに気になりました。 それはプログラミング言語が明示的に許可してはいけないものですか(C#のように、回避策を提供します)、それともプログラマーの手に委ねるのに十分強力な言語の機能ですか? 編集: 私はフォールスルーで何を意味するのか十分に特定していませんでした。私はこのタイプをよく使います: switch(m_loadAnimSubCt){ case 0: case 1: // Do something break; case 2: case 3: case 4: // Do something break; } しかし、私はこのようなことが心配です。 switch(m_loadAnimSubCt){ case 0: case 1: // Do something, but fall through to the other cases // after doing it. case 2: case 3: …

13
Java switchステートメントの複数のケース
Javaのswitchステートメントで複数のケースを使用する方法を理解しようとしています。これが私がやろうとしていることの例です: switch (variable) { case 5..100: doSomething(); break; } やらなければならないこと: switch (variable) { case 5: case 6: etc. case 100: doSomething(); break; } これが可能であればアイデアはありますか、それとも良い代替案は何ですか?

5
スイッチがなぜより速いのか
多くのJavaの本では、このswitch声明は声明よりも速いと説明されていますif else。しかし、なぜスイッチがより速いのかはどこにもわかりませんでした。 例 2つのうち1つを選ばなければならない状況があります。どちらでも使えます switch (item) { case BREAD: //eat Bread break; default: //leave the restaurant } または if (item == BREAD) { //eat Bread } else { //leave the restaurant } アイテムとBREADを考慮すると、定数のint値です。 上記の例では、どちらがより高速で、なぜですか?

19
スイッチ内からループを抜け出す方法は?
次のようなコードを書いています。 while(true) { switch(msg->state) { case MSGTYPE: // ... break; // ... more stuff ... case DONE: break; // **HERE, I want to break out of the loop itself** } } それを行う直接的な方法はありますか? フラグを使用して、スイッチの直後に条件付きブレークを置くことでループから抜けることができることは知っています。C ++にこのための構造が既にあるかどうかを知りたいだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.