在使用反射的时候,有时候要根据不同的类型做不同的操作。其中要做的一件事是枚举.NET的基本类型。由于进行.NET开发,已经对.NET的基本类型较了解,可能会使用下面的代码进行枚举:
Type objectType = obj.GetType();
if(objectType == typeof(string))
{
// DO sth
}
else if(objectType == typeof(int) || objectType == typeof(int?))
{
// DO sth
}
else if(objectType == typeof(enum))
{
// DO sth
}
// more else
if(objectType == typeof(string))
{
// DO sth
}
else if(objectType == typeof(int) || objectType == typeof(int?))
{
// DO sth
}
else if(objectType == typeof(enum))
{
// DO sth
}
// more else
这样做有一点不好,有时候要为漏掉某个基本而苦恼。
原来.NET FX中有相应的类型和方法可以做得更好:使用 Convert.GetTypeCode 获取一个值,而这个值是 TypeCode 枚举值中的一个。这样就简单了。
TypeCode code = Convert.GetTypeCode(obj);
switch(code)
{
case TypeCode.String:
// DO sth
break;
case TypeCode.Int:
// DO sth
break;
// case ...
}
switch(code)
{
case TypeCode.String:
// DO sth
break;
case TypeCode.Int:
// DO sth
break;
// case ...
}
这样除了代码看起来优雅外,还可以避免列举不全的问题。