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

type-nameがsql-typeに属しているかどうかを確認したいとします。フレームワークで使用できるプロパティまたはメソッドはありません。

ただし、明示的に設定されていない場合は、からへのSqlParameter 変換を推測するために何をするかを実行できます。TypeSqlDbType

InferSqlType次のメソッドは、SqlParameterの:から直接派生しています。

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

次に、チェックするアセンブリを知るだけで済みます。

あなたの場合、システムアセンブリで十分なようです。

ジェッペは良い点を述べています。以下の彼のコメントを参照してください。

于 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");

System.Int32タイプが見つかったため、上記はtrueを返します-指定されたタイプが見つからない場合は、エラーをスローすることもできます。

于 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();
  }
}

次に、入力文字列を使用して、必要なブール値(true / false値)を取得するようにinput言うことができます。TypeHelper.BuiltInTypeNames.Contains(input)

于 2012-10-09T14:50:15.217 に答える