C# 检查给定类型是否为枚举

C# 检查给定类型是否为枚举,c#,enums,C#,Enums,我正在为Json.NET编写一个JsonConverter,它应该允许我将任何枚举转换为由[Description]属性定义的字符串值 例如: public enum MyEnum { [Description("Sunday")] Sunday, [Description("Monday")] Monday, [Description("Tuesday")] Tuesday, [Description("Wednesday")] Wednesday, [

我正在为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
,因此我无法明确检查每一个,因此我希望有一种更通用的方法来实现这一点。

使用属性:

if(objectType.IsEnum) {
    return true;
}

是您要查找的

我完全误解了这个问题,因为我过于关注[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;
    }
}

当您说“确定objectType是否为枚举”时,您基本上是想检查objectType是否为“MyEnum”,而不仅仅是检查任何其他枚举。对吗?不,我想检查它是否有枚举@minitech的答案就是我想要的。或者只是
返回objectType.IsEnum
@AndrewWhitaker:我想,由于该方法名为
CanConvert
,它将检查多个不同的可能转换,而不仅仅是它是否是
枚举。否则,您最好只使用
IsEnum
属性本身。@BryanMigliorisi:非常欢迎:)请确保始终浏览IntelliSense,我从中学到了很多。@SergeyMetlov在PCL中,您可以使用objectType.GetTypeInfo().IsEnumhow About if(myObject是Enum)