我有一个方法,希望将参数作为自定义Enum类型的数组.
看起来像这样的东西:
public void DoSomething(WhatDoIPutHere[] parameters)
Run Code Online (Sandbox Code Playgroud)
我想传递给这个方法a Enum1[]或者Enum2[]where Enum1和Enum22 Enum种类型.
我需要使用什么而不是WhatDoIPutHere?
我本来希望定义DoSomething的签名,因为Enum[]它以某种方式Enum是Enum类型的基类(对吧?):
public void DoSomething(Enum[] parameters)
Run Code Online (Sandbox Code Playgroud)
但它给出了:
无法从'xxx.Enum1 []'转换为'System.Enum []'
我也尝试将其定义为object[]但我得到了同样的编译器错误..
我知道这是完全臭的代码,如果我能,我肯定会摆脱它...
你不能.值类型数组不是协变的.你有点想这样写:
public void DoSomething<T>(T[] parameters) where T : struct, System.Enum
Run Code Online (Sandbox Code Playgroud)
...但是也不允许这样做(类型参数不能被限制为枚举或委托).
选项:
允许任何数组:
public void DoSomething(Array parameters)
Run Code Online (Sandbox Code Playgroud)允许任何值类型数组:
public void DoSomething<T>(T[] parameters)
Run Code Online (Sandbox Code Playgroud)使用Unconstrained Melody通过IL-rewriting hack编写第一个表单.
| 归档时间: |
|
| 查看次数: |
345 次 |
| 最近记录: |