如何在一个接口中获得一个C#Enum,就像一个C枚举一样?

如何在一个接口中获得一个C#Enum,就像一个C枚举一样?,c#,interface,enums,C#,Interface,Enums,我习惯于用C语言枚举,但对于C语言如何处理它们仍然有点困惑。我想在C#中实现一个如下所示的接口 enum foo { one, two } interface Ibar { enum foo {get;} } 其中,当获取属性foo时,实现接口Ibar的类将返回foo.one或foo.two。比如说 class bar : Ibar { enum foo { get { return foo.one; } } } 我可以这样做 bar b = new bar;

我习惯于用C语言枚举,但对于C语言如何处理它们仍然有点困惑。我想在C#中实现一个如下所示的接口

enum foo {
  one,
  two 
}

interface Ibar {
  enum foo {get;}
}
其中,当获取属性foo时,实现接口Ibar的类将返回foo.one或foo.two。比如说

class bar : Ibar {
  enum foo {
    get { return foo.one; }
  }
}
我可以这样做

bar b = new bar;
if (b.foo == foo.one) {... }
上面的接口代码要求我在接口内定义枚举(它说“;”应该是“,”)


我能找到的最贴切的帖子是,但枚举是在类中定义的。

我认为您想要的语法如下:

enum Foo
{
    One,
    Two 
}

interface IBar
{
    Foo Foo { get; }
}

结果是一个接口,其属性名为
Foo
,类型为
Foo

,语法如下:

enum foo { one, two }

interface Ibar { foo foo { get; } }

class bar : Ibar { foo foo { get { return foo.one; } } }
只能使用
enum
定义新的enum;创建成员变量时,使用已创建的枚举的名称

但是,最好不要将成员变量命名为与枚举类型相同的名称:

enum FooEnum { One, Two }

interface IBar { FooEnum FooValue { get; } }

class Bar : IBar { FooEnum FooValue { get { return FooEnum.one; } } }
(注意,我只使用了
Enum
Value
来说明哪一种是枚举类型,哪一种是值,不要这样做。)


(另外,我认为这更像通常的C#casing约定。)

不太清楚问题出在哪里。错误消息可能会帮助我们understand@mihai-请参阅下面的答案以了解有关问题的说明。我不同意您的第二个版本。不要将Enum放在Enum的名称中。这是多余的。将属性命名为类型是完全合法的,绝对不是问题。@Daniel我同意,我只是想区分枚举类型和成员。我想在某些情况下,使用相同的枚举可能更合适,但如果不知道枚举代表什么,就很难说了。