C#ではswitch文に文字列が使える
プログラミングC# p47
たとえばこんなの。
using System; class switchstr { static void Main(string[] args) { switch(args[0]) { case "c#": Console.WriteLine("ms"); break; case "java": Console.WriteLine("sun"); break; default: Console.WriteLine("other"); break; } } }
ちなみに、argsのレングスチェックしてないじゃないか!
とお叱りを受ける前に、引数無しでこのプログラムを実行してみた。すると、
ちょっとびびった。
これを閉じると、コンソールにこんなメッセージが表示された。
ハンドルされていない例外: System.IndexOutOfRangeException: インデックスが配列の 境界外です。 場所 switchstr.Main(String[] args)
うん。わりかし普通。
ちなみにJavaのswitchはどうかというと、
Java言語規定 / 14.9 switch文
式(Expression)の型は,char,byte,short 又は int のいづれかでなければならない。そうでなければ,コンパイル時エラーが発生する。
とある。例えばこんなコードを書いてみる。
public class switchstr { public static void main(String[] args) { switch(args[0]) { case "c#": System.out.println("ms"); break; case "java": System.out.println("sun"); break; default: System.out.println("other"); break; } } }
コンパイルするとこうなる。
switchstr.java:5: 互換性のない型 検出値 : java.lang.String 期待値 : int switch(args[0]) ^ エラー 1 個
なんかちょっと分かりづらいぞ。