如何查找给定字符串是否为内置类型,它们是系统命名空间中预定义类型的别名。
例如:1
Input = "System.Int32" (this is string)
OutPut : True(indicating it's Built-In Name)
例如:2
Input = "xxx"
Output = False(indicating it's not Built-In Type name)
对此的任何建议都将受到高度赞赏。
提前致谢
假设您要检查类型名称是否属于 sql 类型。框架中没有可用的属性或方法。
但是,如果没有明确设置,您可以执行从toSqlParameter
推断转换的操作。Type
SqlDbType
以下方法直接派生自 SqlParameter 的InferSqlType
:
public static bool IsConvertibleToSqlDbType(String type)
{
switch(type) {
case "System.Int64":
case "System.Data.SqlTypes.SqlInt64":
return true;
case "System.Boolean":
case "System.Data.SqlTypes.SqlBoolean":
return true;
case "System.String":
case "System.Data.SqlTypes.SqlString":
return true;
case "System.DateTime":
case "System.Data.SqlTypes.SqlDateTime":
return true;
case "System.Decimal":
case "System.Data.SqlTypes.SqlDecimal":
return true;
case "System.Double":
case "System.Data.SqlTypes.SqlDouble":
return true;
case "System.Byte[]":
case "System.Data.SqlTypes.SqlBinary":
return true;
case "System.Byte":
case "System.Data.SqlTypes.SqlByte":
return true;
case "System.Int32":
case "System.Data.SqlTypes.SqlInt32":
return true;
case "System.Single":
case "System.Data.SqlTypes.Single":
return true;
case "System.Int16":
case "System.Data.SqlTypes.SqlInt16":
return true;
case "System.Guid":
case "System.Data.SqlTypes.SqlGuid":
return true;
case "System.Money":
case "System.SmallMoney":
case "System.Data.SqlTypes.SqlMoney":
return true;
case "System.Object":
return true;
default:
return false;
}
}
我认为您正在寻找 Assembly.GetType(string)
如果方法返回 null,则程序集不知道类型。
http://msdn.microsoft.com/en-us/library/system.reflection.assembly.gettype.aspx
然后,您只需要知道要检查哪个程序集。
在您的情况下,看起来 System 程序集就足够了。
Jeppe 提出了一个很好的观点,请参阅下面的评论。
public bool IsBuiltInType(string typeName)
{
return Type.GetType(typeName, false) != null;
}
我想这就是你要找的。
http://msdn.microsoft.com/en-us/library/system.type.gettype.aspx
IsBuiltInType("System.Int32");
上面返回 true,因为它找到了 System.Int32 类型 - 如果它没有找到指定的类型,您也可以抛出错误。
Type.GetType("System.Int32", false) != null
会让你知道类型是否存在。但是,它还会检查当前应用程序域中加载的类型。
这个怎么样:
static class TypeHelper
{
public static readonly IList<string> BuiltInTypeNames;
static TypeHelper()
{
Type[] allBuiltInTypes = { typeof(string), typeof(int), typeof(decimal), }; // add whatever types you consider "built-in".
BuiltInTypeNames = allBuiltInTypes.Select(t => t.FullName).ToList().AsReadOnly();
}
}
然后使用输入字符串input
,您可以说TypeHelper.BuiltInTypeNames.Contains(input)
获取所需的布尔值(真/假值)。