枚举数组的“常规”类型是什么
本文关键字:类型 是什么 常规 数组 枚举 | 更新日期: 2023-09-27 18:30:55
我有一个方法,它想将自定义Enum
类型的数组作为参数。
看起来像这样的东西:
public void DoSomething(WhatDoIPutHere[] parameters)
我想传递给此方法一个Enum1[]
或一个Enum2[]
,其中Enum1
和Enum2
是 2 种Enum
类型。
我需要用什么代替WhatDoIPutHere
?
我本来希望将DoSomething的签名定义为Enum[]
,因为Enum
以某种方式是枚举类型的基类(对吗?
public void DoSomething(Enum[] parameters)
但它给出了一个:
无法从"xxx.Enum1[]"转换为"System.Enum[]"
我也尝试将其定义为object[]
但我得到相同类型的编译器错误。
我知道这完全是臭代码,如果可以的话,我肯定会摆脱它......
你不能。值类型数组不是协变的。你有点想写:
public void DoSomething<T>(T[] parameters) where T : struct, System.Enum
。但这也是不允许的(类型参数不能被约束为枚举或委托)。
选项:
允许任何数组:
public void DoSomething(Array parameters)
允许任何值类型的数组:
public void DoSomething<T>(T[] parameters)
使用不受约束的旋律来编写第一种形式,通过 IL 重写技巧。