1
 class MainClass
{
    static void Main(String[] args)
    {
        Fruits f =Fruits.Banana;
        Console.WriteLine("Fruit={0}",f);
        Console.Read();
    }

    private enum Fruits
    {
        Banana=0,
        Apple=0,
        Orange=0,
        Cherries
    }

}

上記のコードは出力を提供します:Fruit=Apple

バナナの値を列挙型内で0以外に変更すると、出力はバナナになります。私の質問は、最初のケースでは、なぜ出力がそうではAppleないのOrangeか、Bananaそれ自体ではないのかということです。

4

2 に答える 2

2

なんでそんなことをしているの?とにかく、それは内部的にenum同じ値のsがアルファベット順に選択されているためです。

于 2012-12-28T08:58:48.500 に答える
2

内部的には、列挙型は単一の内部フィールドを持つaに非常に似ており、値を格納するstruct列挙型の基本型(ここでは、)と同じ型を持っています。int

列挙型に関する限り、これで終わりです。列挙型からの名前付き値を使用するか、基本型からキャストするか、またはその他の手段によって、他に何も格納されません。どのように構築されたかはわかりません。

そのため、文字列表現を要求する場合、数値を取得してその値に一致する列挙型メンバーの中から名前を見つけようとする以外に、先に進む情報はありません。

複数のメンバーが同じ数値を持っている場合にどの値が選択されるかが定義されているかどうかはわかりませんが、何かを選択する必要があり、少なくとも一貫しているように見えます。


実際、次のようにEnum.ToString()述べています。

複数の列挙型メンバーが同じ基になる値を持ち、基になる値に基づいて列挙型メンバーの名前の文字列表現を取得しようとする場合、コードはメソッドが返す名前について何も想定しないでください。

于 2012-12-28T09:05:55.657 に答える