You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何检查值是否为枚举数组类型?

如何检查对象是否为枚举数组类型

想判断某个对象的类型是不是枚举数组,别直接用obj.PropertyType == typeof(Enum[])——这玩意儿不管用,因为像SomeEnum[]这种具体枚举的数组,和Enum[]根本不是同一个类型,直接比类型只会匹配Enum[]本身,匹配不到具体枚举的数组。

正确的做法分两步:

  • 先确认当前类型是数组(用Type.IsArray)
  • 再拿数组的元素类型,检查它是不是枚举(用ElementType.IsEnum)

对应的代码改成这样就行:

// obj = SomeEnum[20]
else if (obj.PropertyType.IsArray && obj.PropertyType.GetElementType().IsEnum)
{
    SetValue(parser, obj);
}

如果还要兼容可空枚举数组(比如SomeEnum?[]),可以加个额外判断:

else if (obj.PropertyType.IsArray)
{
    var elementType = obj.PropertyType.GetElementType();
    // 同时处理普通枚举数组和可空枚举数组
    if (elementType.IsEnum || 
        (elementType.IsGenericType && elementType.GetGenericTypeDefinition() == typeof(Nullable<>) &&
         elementType.GetGenericArguments()[0].IsEnum))
    {
        SetValue(parser, obj);
    }
}

为啥原代码不生效?

typeof(Enum[])指的是直接基于Enum的数组类型,但具体的枚举(比如SomeEnum)是Enum的子类,它们的数组类型SomeEnum[]和Enum[]在CLR里是完全不同的类型,所以用==对比肯定匹配不上。

内容的提问来源于stack exchange,提问作者user23924518

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:32:06