枚举数组的“常规”类型是什么

本文关键字:类型 是什么 常规 数组 枚举 | 更新日期: 2023-09-27 18:30:55

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

看起来像这样的东西:

public void DoSomething(WhatDoIPutHere[] parameters)

我想传递给此方法一个Enum1[]或一个Enum2[],其中Enum1Enum2是 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 重写技巧。