如何在界面中表示枚举

Pos*_*Guy 30 c# enums interface

好的,所以这篇文章的基础和解释标题很简单.我有一个方法的接口.用户端的该方法将枚举作为参数.但是你不能在界面中定义枚举因此我不知道如何定义这个方法然后如果我期待一个类型枚举作为传入参数之一.

那你怎么处理这种情况呢?你怎么能在你的界面中获得该方法.你不知道他们需要发送什么Enum但是你肯定知道你想要它是一个枚举而不是魔术字符串.

枚举不是引用类型,因此您不能将其Object用作传入参数的类型.所以不知道该怎么做.

小智 31

public enum MyEnum
{
  Hurr,
  Durr
}

public interface MyInterface
{
  void MyMethod(MyEnum value);
}
Run Code Online (Sandbox Code Playgroud)

如果这不是您正在谈论的内容,请发表评论,以便人们了解您的问题.因为,虽然enum没有在界面中定义,但这是一个完全正常且可接受的设计.

  • 我想问题是该方法是否采用特定的枚举,或任何枚举... (5认同)

Yur*_*ich 19

interface MyInterface
{
    void MyMethod(Enum @enum);
}
Run Code Online (Sandbox Code Playgroud)

  • @coffeeaddict:它允许您使用保留字作为参数名称.没有它,你会得到一个编译器错误(除非你将"枚举"重命名为其他东西) (26认同)
  • 期待你的问题:`@ enum`是变量的名称.这种语法没有什么特别之处 (9认同)
  • 什么是@ for?我试着在MSDN中查找...对不起,如果这看起来微不足道.我是创建界面的新手. (4认同)

Sam*_*ULT 7

另一种解决方案可能是使用泛型类型:

public enum MyEnum
{
    Foo,
    Bar
}

public interface IDummy<EnumType>
{
    void OneMethod(EnumType enumVar);
}

public class Dummy : IDummy<MyEnum>
{
    public void OneMethod(MyEnum enumVar)
    {
        // Your code
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,从 C# 7.3 开始,您可以添加通用约束以仅接受 Enum 类型:

public interface IDummy<EnumType> where EnumType : Enum
{
    void OneMethod(EnumType enumVar);
}
Run Code Online (Sandbox Code Playgroud)