如何声明一个泛型类型使用的枚举?

Ala*_*yne 4 c# generics

我想在父抽象类中声明以下内容:

  public abstract void RefreshDisplay<TView>(Enum value);
Run Code Online (Sandbox Code Playgroud)

然后将在子类中实现,如:

   public override void RefreshDisplay<RxViewModel>(RxViews view)
Run Code Online (Sandbox Code Playgroud)

其中RxViews是枚举,并从该枚举"查看"特定值.

直到运行时才会知道它来自的实际视图和枚举.

可以这样做吗?我很感激帮助.

编辑:我可能会问这个错误.TView不是枚举,而是从ViewModelBase继承的视图.(我不知道这是一个重复的问题?)谢谢.

编辑:我猜这是在4.5中修复的.任何想法如何在net 4.0中解决这个问题?

toa*_*akz 12

您需要Enum在.NET 4.0中使用泛型的约束类型如下 - 请注意,您需要更改类声明才能使其正常工作:

public abstract class BaseClass<TView, TEnum> 
    where TView: ViewModelBase
    where TEnum : struct,  IComparable, IFormattable, IConvertible
{

    public abstract void RefreshDisplay<TView, TEnum>(TEnum value);
}
Run Code Online (Sandbox Code Playgroud)

但是,您应该在方法的实现中执行类似于以下行的操作:

if (!typeof(TEnum).IsEnum) { throw new ArgumentException("TEnum must be an enumerated type"); }
Run Code Online (Sandbox Code Playgroud)

类型检查是必要的,因为不是100%确定它是一个Enum(tho' Enum实现所有那些方面,这就是它们被使用的原因).

您可能希望考虑制定方法virtual并将其包含在基本方法实现中.

请注意,此代码根据此处提供的答案进行了改编:创建将T限制为枚举的通用方法