17

タイプの定数を作成しようとしていますEnumが、エラーが発生します..私の列挙型は次のとおりです。

public enum ActivityStatus
{
    Open = 1,
    Close = 2
}

そして私はそれを使用するモデルを持っています:

public class CreateActivity
{
    public int Id;
    public const ActivityStatus ActivityStatus = ActivityStatus.Open;
}

次のエラーが発生します。

エラー 1 「Help_Desk.Models.CreateActivity.ActivityStatus」の定数値の評価には循環定義が含まれています...

しかし、ActivityStatusプロパティの名前を変更すると機能します!

public class CreateActivity
{
    public int Id;
    public const ActivityStatus AnyOtherName = ActivityStatus.Open;
}

なぜそれが起こるのですか?

4

4 に答える 4

17

C# コンパイラは 3 番目ActivityStatusを次のように解釈するためです。

public const ActivityStatus ActivityStatus = ActivityStatus.Open; 

列挙の名前ではなく、定義されている定数の名前として-したがって、循環参照:定数自体に関して定数を定義しています。

C# では、メンバーと型に同じ名前を使用でき、通常は完全修飾名を指定してあいまいさを解決します (つまり、名前空間を追加します)。しかし、コードを読む下手な人間は、特定の名前がクラス、型、またはメンバーを参照しているかどうかを理解するのに苦労します。

于 2012-10-04T14:12:56.727 に答える
2

クラスまたは列挙型と同じ名前の変数を作成しないでください。

次のように名前空間を指定するとうまくいくかもしれません:

public class CreateActivity
{
    public int Id;
    public const TheNamespace.ActivityStatus ActivityStatus =
        TheNamespace.ActivityStatus.ActivityStatus.Open;
}
于 2012-10-04T14:13:41.650 に答える