2008年7月25日金曜日

[.NET]enumの不思議

ふと、以下のような定義の場合、enm1.data1 == enm1.data3の式が成り立つかどうか気になりました。で実行してみました。答えはTrue。いやー意外な結果でした。

enum enm1
{
    data1 = 100,
    data2200,
    data3 = data1,
}

System.Diagnostics.Debug.WriteLine("enm1.data1 = enm1.data3 = " + (enm1.data1 == enm1.data3));


ついでにほかのバリエーションもいろいろ試してみました。
enum enm1
{
    data1 = 100,
    data2200,
    data3 = data1,
}

enum enm2
{
    data1 = 100,
}

System.Diagnostics.Debug.WriteLine("1. enm1.data1.Equals(enm1.data1) = " + enm1.data1.Equals(enm1.data1));
System.Diagnostics.Debug.WriteLine("2. enm1.data1.Equals(enm1.data3) = " + enm1.data1.Equals(enm1.data3));
System.Diagnostics.Debug.WriteLine("3. enm1.data1.Equals(enm2.data1) = " + enm1.data1.Equals(enm2.data1));
System.Diagnostics.Debug.WriteLine("4. enm1.data1.Equals(100) = " + enm1.data1.Equals(100));
System.Diagnostics.Debug.WriteLine("5. enm1.data1.Equals((enm1)100) = " + enm1.data1.Equals((enm1)100));

System.Diagnostics.Debug.WriteLine("6. " + ((enm1)100).ToString() );
System.Diagnostics.Debug.WriteLine("7. enm1.data1 = enm1.data3 = " + (enm1.data1 == enm1.data3));


結果は以下のとおり。

1. enm1.data1.Equals(enm1.data1) = True
2. enm1.data1.Equals(enm1.data3) = True
3. enm1.data1.Equals(enm2.data1) = False
4. enm1.data1.Equals(100) = False
5. enm1.data1.Equals((enm1)100) = True
6. data1
7. enm1.data1 = enm1.data3 = True


実験の結果、値が同じでかつ型が同じであれば等価。という意味に取れますね。

0 件のコメント: