如何检查对象是否为枚举

时间:2013-11-19 12:12:49

标签: c# .net types

我有一个SQL查询构建器方法:

public static string PreprocessSQL(string sql, params object[] args) 

如果sql参数是“String.Format friendly”,则此方法遍历params并将它们插入查询字符串,根据参数的类型执行任何需要完成的操作 - 将null转换为字符串“ NULL“,用单引号括起一个字符串,等等。

现在问题在于枚举。我需要一个逻辑来检查当前args [i]的类型是否为Enum,如果是,则将其转换为int。怎么做这个检查?出于某种原因,我的第一个猜测不起作用:

if(args[i].GetType() == typeof(Enum)) {
    converted.Add((int)args[i]);
}

上述情况显然被评估为假。

我的枚举课程是:

public enum Priority {
    Low,
    Normal,
    High
}

如果将Priorty.Normal的值传递给此方法,我认为“value”是Normal,并且该值的类型是Priority,它自动从Enum继承,所以我已经完成了。原来并不是那么简单,从我所知道的,看起来像Normal的类型实际上是Priority.Normal

现在我可以明确检查我在项目中使用的所有枚举,它实际上只有2个类,但是这甚至可以工作吗?

if(args[i].GetType() == typeof(Priority)) { ... }

我的意思是,如果args [i]的类型是Priority.Normal,那么这也会被评估为false。

如何检查未知object o是否具有枚举类的类型?

3 个答案:

答案 0 :(得分:2)

您可以查看IsEnum属性。

args[i].GetType().IsEnum

或者

if(args[i] is Enum)
{
}

或者

bool isEnum = typeof(Enum).IsAssignableFrom(args[i].GetType());

或者

bool isEnum = typeof(Enum).IsInstanceOfType(o);

答案 1 :(得分:1)

试试这个

 bool isEnum = o is Enum;

答案 2 :(得分:0)

您可以利用IsEnum

System.Type属性
bool isEnum = typeof(YourType).IsEnum