我有一种方法可以将自定义Enum
类型数组作为参数。
看起来像这样的东西:
public void DoSomething(WhatDoIPutHere[] parameters)
我想将Enum1[]
或Enum2[]
传递给此方法,其中Enum1
和Enum2
是Enum
类型。
我需要使用什么而不是WhatDoIPutHere
?
我本来希望将DoSomething的签名定义为Enum[]
,因为某种方式Enum
是Enum类型的基类(对吗?):
public void DoSomething(Enum[] parameters)
但它给出了:
无法从'xxx.Enum1 []'转换为'System.Enum []'
我也尝试将其定义为object[]
,但我得到了同样的编译器错误..
我知道这是完全臭的代码,如果可以,我肯定会摆脱它......
答案 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编写第一个表单。