2016-05-11 2 views
0

長い列挙型を継承しているので、アプリケーションでフラグとして使用しています。C#で長い列挙型を解析する

私はint.MaxValueより大きい値を解析できないことに気付きました。間違っているのですか?これはサポートされていませんか?

例えば...

using System; 

public class Program 
{ 
    public static void Main() 
    { 

     foreach (var option in Enum.GetValues(typeof (A))) { 
      Console.WriteLine((long)option + " = " + option); 
     } 

     foreach (var option in Enum.GetNames(typeof(A))) { 
      var name = option; 
      var val = Enum.Parse(typeof(A),name); 
      Console.WriteLine(option + " is " + ((long)val)); 
     } 

    } 

    public enum A : long {  
     Red = 1 << 0, 
     Blue = 1 << 32, 
     Green = 1 << 33 
    } 
} 

が生成されます

1 = Blue 
1 = Blue 
2 = Green 
Red is 1 
Blue is 1 
Green is 2 

任意のアイデアを正しい結果を取得する方法?

答えて

2

これを行うと、なぜ問題が表示されますか:Console.WriteLine((int)A.Blue);。今度はBlue = 1L << 32と書いて問題を解決してください。 (1 < < 32 1及び32の両方が整数とそうですが、あまりにも1 < < 32であり、それは整数をオーバーフローするので、それが0である、大規模な数ではない)

+0

パーフェクトは、私はシンプルなものがありませんでした知っていました... –

関連する問題