好的,所以这篇文章的基础和解释标题很简单。我有一个方法的接口。用户端的该方法将枚举作为参数。但你无法在界面中定义枚举,因此我不知道如何定义这个方法然后如果我期待一个类型枚举作为传入参数之一。
那你怎么处理这种情况呢?你怎么能在你的界面中获得该方法。你不知道他们需要发送什么Enum但是你肯定知道你想要它是一个枚举而不是魔术字符串。
Enum不是引用类型,因此您不能使用Object
作为传入参数的类型。所以不知道该怎么做。
答案 0 :(得分:28)
public enum MyEnum
{
Hurr,
Durr
}
public interface MyInterface
{
void MyMethod(MyEnum value);
}
如果这不是您正在谈论的内容,请发表评论,以便人们了解您的问题。因为,虽然enum没有在界面中定义,但这是一个完全正常且可接受的设计。
答案 1 :(得分:14)
interface MyInterface
{
void MyMethod(Enum @enum);
}
答案 2 :(得分:1)
另一种解决方案是使用通用类型:
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
}
}
此外,从C#7.3开始,您可以添加通用约束以仅接受Enum类型:
public interface IDummy<EnumType> : where EnumType : Enum
{
void OneMethod(EnumType enumVar);
}
答案 3 :(得分:0)
如果您正在讨论通用接口以及C#不允许将通用类型限制为枚举这一事实,则answers to this question包含两种不同的解决方法。
答案 4 :(得分:0)
定义枚举就像定义类或定义接口一样。您可以将它放在一个类文件中,在命名空间内但在类定义之外,但是如果有几个类使用它,你把它放在哪个类中,无论你选择哪个,你都会得到&#34;类型名称确实不匹配文件名&#34;警告。所以&#34;对&#34;这样做的方法是把它放在自己的文件中,就像你或类或接口一样:
MyEnum.cs
namespace MyNamespace
{
internal enum MyEnum { Value1, Value2, Value3, Value4, Value5 };
}
然后命名空间中的任何接口或类都可以访问它。