最近の質問を読んだ後、異なる列挙型間の操作は別の列挙型宣言で許可されていますが、他の場所では許可されていません。この例を思いつきました。
enum Alpha : long
{
X,
}
enum Beta : ulong
{
X,
}
enum Gamma : long
{
X = Alpha.X | Beta.X, // problem?
}
enum Delta : ulong
{
X = Alpha.X | Beta.X, // no problem?
}
コンパイルの結果:Gamma
コンパイルされません(CS0266:タイプ'ulong'を'long'に暗黙的に変換できません。明示的な変換が存在します(キャストがありませんか?))。Delta
楽しくコンパイルします。
これは、C#言語仕様から予期されないことではありませんか?
(注:Alpha
初期化するメンバーをのように負の定数に変更すると、コンパイルもコンパイルもされ-1L
ません。)Gamma
Delta