0

如何查找给定字符串是否为内置类型,它们是系统命名空间中预定义类型的别名。
例如: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)

对此的任何建议都将受到高度赞赏。

提前致谢

4

5 回答 5

2

假设您要检查类型名称是否属于 sql 类型。框架中没有可用的属性或方法。

但是,如果没有明确设置,您可以执行从toSqlParameter 推断转换的操作。TypeSqlDbType

以下方法直接派生自 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;
    }
}
于 2012-10-09T14:26:30.323 回答
1

我认为您正在寻找 Assembly.GetType(string)

如果方法返回 null,则程序集不知道类型。

http://msdn.microsoft.com/en-us/library/system.reflection.assembly.gettype.aspx

然后,您只需要知道要检查哪个程序集。

在您的情况下,看起来 System 程序集就足够了。

Jeppe 提出了一个很好的观点,请参阅下面的评论。

于 2012-10-09T14:29:08.573 回答
1
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 类型 - 如果它没有找到指定的类型,您也可以抛出错误。

于 2012-10-09T14:29:43.020 回答
1

Type.GetType("System.Int32", false) != null会让你知道类型是否存在。但是,它还会检查当前应用程序域中加载的类型。

于 2012-10-09T14:30:07.533 回答
0

这个怎么样:

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)获取所需的布尔值(真/假值)。

于 2012-10-09T14:50:15.217 回答