什么是"一般"枚举数组的类型?

时间:2012-04-12 08:20:00

标签: c# enums

我有一种方法可以将自定义Enum类型数组作为参数。

看起来像这样的东西

public void DoSomething(WhatDoIPutHere[] parameters)

我想将Enum1[]Enum2[]传递给此方法,其中Enum1Enum2Enum类型。

我需要使用什么而不是WhatDoIPutHere

我本来希望将DoSomething的签名定义为Enum[],因为某种方式Enum是Enum类型的基类(对吗?):

public void DoSomething(Enum[] parameters)

但它给出了:

  

无法从'xxx.Enum1 []'转换为'System.Enum []'

我也尝试将其定义为object[],但我得到了同样的编译器错误..

我知道这是完全臭的代码,如果可以,我肯定会摆脱它......

1 个答案:

答案 0 :(得分:6)

你做不到。值类型数组不是协变的。你有点想要写:

public void DoSomething<T>(T[] parameters) where T : struct, System.Enum

...但是也不允许这样做(类型参数不能被限制为枚举或委托)。

选项:

  • 允许任何数组:

    public void DoSomething(Array parameters)
    
  • 允许任何值类型数组:

    public void DoSomething<T>(T[] parameters)
    
  • 使用Unconstrained Melody通过IL-rewriting hack编写第一个表单。