一个枚举类型的数组中的“通用”类型是什么?

3
我有一个方法想要以参数的形式传入一个自定义枚举类型的数组
如下所示:像这样
public void DoSomething(WhatDoIPutHere[] parameters)

我希望将Enum1[]或者Enum2[]传递给这个方法,其中Enum1Enum2是2个Enum类型。 我需要使用什么代替WhatDoIPutHere? 我原本期望定义DoSomething的签名为Enum[],因为Enum是枚举类型的基类(对吗?):
public void DoSomething(Enum[] parameters)

但是它会提示:

无法将“xxx.Enum1 []”转换为“System.Enum []”

我还尝试将其定义为object [],但我得到了相同类型的编译器错误。

我知道这段代码非常糟糕,如果可以的话我肯定会摆脱它...

1个回答

6
你做不到。值类型的数组不是协变的。你有点希望写成这样:

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

...但这也不被允许(类型参数不能被约束为枚举或委托)。

选项:

  • Allow any array:

    public void DoSomething(Array parameters)
    
  • Allow any array of value types:

    public void DoSomething<T>(T[] parameters)
    
  • Use Unconstrained Melody to write the first form, via IL-rewriting hack.


哇,谢谢,这是一个快速而全面的答案!那我就选择第一个选项吧...我不能太多地改变方法签名(例如添加泛型类型),所以第二个选项不行...至于第三个选项...也许我需要进一步研究,但那是另一个时候的事 :) - tsimbalar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接