在c#接口和接口的方法签名之一中实现枚举

0by*_*tes 8 c# enums interface

我有一个界面

接口:

interface IThing
{
  Enum MyEnum {get;set;}
  string DoAction(MyEnum enumOptionChosen, string valueToPassIn);
}
Run Code Online (Sandbox Code Playgroud)

具体实施:

public class Thing : IThing
{
  public enum MyEnum
  {
    FirstOption,
    SecondOption,
    ThirdOption
  }

  string doAction(MyEnum enumOptionChosen, string valueToPassIn)
  {
    switch(enumOptionChosen)
    {
      case MyEnum.FirstOption:
        x();
        break;
      case MyEnum.SecondOption:
        y();
        break;
      case MyEnum.ThirdOption:
        z();
        break;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,我得到'IThing.MyEnum'是一个'属性'但是像'类型'一样使用.我遗漏了一些能够要求在DoAction()签名中使用Enum的东西.

谢谢你的帮助.

ben*_*wey 17

在您的接口中MyEnum是变量的名称而不是类型,因此编译器将无法识别它.您应该能够使用泛型来完成这项工作.

public interface IThing<T>
{
   T MyEnum { get; set; }
   string doAction(T enumOptionChosen, string valueToPassIn);
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样实现它:

public interface IThing<T>
{
    T MyEnum { get; set; }
    string doAction(T enumOptionChosen, string valueToPassIn);
}

public class Something : IThing<Something.SpecialEnum>
{
    public enum SpecialEnum
    {
        Item1,
        Item2,
        Item3
    }

    public SpecialEnum MyEnum { get; set; }

    public string doAction(SpecialEnum enumOptionChosen, string valueToPassIn)
    {
        return "something";
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 必须在使用接口时使用T. (3认同)