【问题标题】:Check if a given Type is an Enum检查给定的类型是否为枚举
【发布时间】:2011-12-24 02:56:57
【问题描述】:

我正在为 Json.NET 编写一个 JsonConverter,它应该允许我将任何枚举转换为由 [Description] 属性定义的字符串值。

例如:

public enum MyEnum {
    [Description("Sunday")] Sunday,
    [Description("Monday")] Monday,
    [Description("Tuesday")] Tuesday,
    [Description("Wednesday")] Wednesday,
    [Description("Thursday")] Thursday,
    [Description("Friday")] Friday,
    [Description("Saturday")] Saturday
}

我已经有了支持myEnum.Description() 的代码,它显然会返回它的字符串描述。

在JsonConverter的实现中,有这个方法:

    public override bool CanConvert(Type objectType)
    {

    }

我试图弄清楚如何确定 objectType 是否是 Enum 并返回 true 以便转换器知道它可以转换此对象。由于我有很多 Enum,因此我无法明确检查每一个,因此我希望有一种更通用的方法来完成此操作。

【问题讨论】:

  • 当您说“确定 objectType 是否为枚举”时,您基本上是想检查 objectType 是否为“MyEnum”,而不是任何其他枚举。对吗?
  • 不,我想检查它是否是任何枚举。 @minitech 的答案正是我想要的。

标签: c# enums


【解决方案1】:

使用IsEnum 属性:

if(objectType.IsEnum) {
    return true;
}

【讨论】:

  • 或者只是return objectType.IsEnum
  • @AndrewWhitaker:我认为由于该方法称为CanConvert,它将检查多个不同的可能转换,而不仅仅是enum。否则,您也可以只使用 IsEnum 属性本身。
  • @BryanMigliorisi:不客气 :) 一定要经常浏览 IntelliSense,我从中学到了很多。
  • @SergeyMetlov 在 PCL 中你可以使用 objectType.GetTypeInfo().IsEnum
  • if (myObject is Enum) 怎么样
【解决方案2】:

Type.IsEnum 是你要找的东西

【讨论】:

    【解决方案3】:

    我过分关注 [Description],完全误解了这个问题,所以如果你想检查一个特定的枚举是否有 [description] 属性(以防 json 在没有属性时抛出一个合适的值) ,这是一种可能的检查方法:

    public override bool CanConvert(Type objectType)
    {
        FieldInfo[] fieldInfo = objectType.GetFields(BindingFlags.Public | BindingFlags.Static);
    
        if( fieldInfo.Length > 0 )
        {
            return ( fieldInfo[0].GetCustomAttributes(typeof(DescriptionAttribute),false).Length > 0 );
        }
        else
        {
            return false;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 2019-01-24
      • 2011-06-23
      相关资源
      最近更新 更多