プログラマとプロマネのあいだ

プログラマもやるし、プロマネもやるし、たまに似非アーキとか営業っぽいこともやる

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 個

なんかちょっと分かりづらいぞ。