我有一个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
是否具有枚举类的类型?
答案 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