複数の対応する名前を持つ値をToString()
呼び出すときに、どの名前が選択されるかを決定するものは何ですか?enum
質問の長い説明は以下のとおりです。
これは、次のいずれかによって一意に決定されるものではないと判断しました。宣言順序; また、名前の長さ。
たとえば、数値が実際の用途 (色の RGB 値など) に直接対応する列挙型が必要だとします。
public enum RgbColor
{
Black = 0x000000,
Red = 0xff0000,
Green = 0x00ff00,
Blue = 0x0000ff,
White = 0xffffff
}
これで、この列挙型を呼び出すdefault(RgbColor)
と、黒の RGB 値が返されます。デフォルト値を黒にしたくないとしましょう。これは、UI デザイナーが、使用する色について具体的な指示がない場合に「デフォルト」の呼び出しを使用できるようにするためです。今のところ、UI デザイナーが使用するデフォルト値は実際には「青」ですが、これは変更される可能性があります。そのため、列挙型に追加のTextDefault
定義を追加すると、次のようになります。
public enum RgbColorWithTextDefaultFirst
{
TextDefault = 0x0000ff,
Black = 0x000000,
Red = 0xff0000,
Green = 0x00ff00,
Blue = 0x0000ff,
White = 0xffffff
}
今、私はこれをテストしましたが、呼び出しRgbColorWithTextDefaultFirst.TextDefault.ToString()
とRgbColorWithTextDefaultFirst.Blue.ToString()
両方が「青」を生成することがわかりました。そのため、最後に宣言された名前が以前の宣言の名前を上書きすると考えました。私の仮定をテストするために、私は書きました:
public enum RgbColorWithTextDefaultLast
{
Black = 0x000000,
Red = 0xff0000,
Green = 0x00ff00,
Blue = 0x0000ff,
White = 0xffffff,
TextDefault = 0x0000ff
}
しかし、驚いたことに、RgbColorWithTextDefaultLast.Blue.ToString()
そしてRgbColorWithTextDefaultLast.TextDefault.ToString()
. 私の次の推測は、名前をアルファベット順に並べ替えて、最初の名前を返すことです。これをテストするには、次のことを試します。
public enum RgbColorWithATextDefaultFirst
{
ATextDefault = 0x0000ff,
Black = 0x000000,
Red = 0xff0000,
Green = 0x00ff00,
Blue = 0x0000ff,
White = 0xffffff
}
public enum RgbColorWithATextDefaultLast
{
Black = 0x000000,
Red = 0xff0000,
Green = 0x00ff00,
Blue = 0x0000ff,
White = 0xffffff,
ATextDefault = 0x0000ff
}
さて、 、 、 、 の 4 つすべてについてRgbColorWithATextDefaultFirst.ATextDefault.ToString()
、RgbColorWithATextDefaultFirst.Blue.ToString()
「RgbColorWithATextDefaultLast.ATextDefault.ToString()
青RgbColorWithATextDefaultLast.Blue.ToString()
」になります。もう一つ特徴的なのは紐の長さです。私の推測では、選択された名前は名前文字列の長さによって決定されます。だから、私のテストはこれらの宣言を使用することです:
public enum RgbColorWithALast
{
Black = 0x000000,
Red = 0xff0000,
Green = 0x00ff00,
Blue = 0x0000ff,
White = 0xffffff,
A = 0x0000ff
}
public enum RgbColorWithAFirst
{
A = 0x0000ff,
Black = 0x000000,
Red = 0xff0000,
Green = 0x00ff00,
Blue = 0x0000ff,
White = 0xffffff
}
ここで、次のすべてに対してどのような値が得られたかを推測しますRgbColorWithAFirst.A.ToString()
。RgbColorWithAFirst.Blue.ToString()
; RgbColorWithALast.A.ToString()
、RgbColorWithALast.Blue.ToString()
。そうです、「ブルー」です。
この時点で、推測によってこれを決定するものを把握しようとすることをあきらめました。私はリフレクターを開いて、これを調べて理解しようとしていますが、ここで誰かがすでに答えを知っているかどうかを確認するためにここで質問することにしました。複数の対応する名前をToString()
持つenum
値を呼び出すときに選択されますか?