3

我有一个方法想将自定义类型数组Enum作为参数。

看起来像这样的东西:

public void DoSomething(WhatDoIPutHere[] parameters)

我想将 aEnum1[]或 a Enum2[]where传递给此方法,Enum1并且Enum2是 2Enum种类型。

我需要用什么代替WhatDoIPutHere

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

public void DoSomething(Enum[] parameters)

但它给出了一个:

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

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

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

4

1 回答 1

6

你不能。值类型数组不是协变的。你有点想写

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

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

选项:

  • 允许任何数组:

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

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

于 2012-04-12T08:22:07.943 回答