2010-06-22 100 views

回答

10

如果內置TypeCode枚舉滿足您的需求,那麼你可能剛剛看了你DataColumn然後的DataType屬性調用GetTypeCode

TypeCode yourTypeCode = Type.GetTypeCode(yourDataColumn.DataType); 

switch (yourTypeCode) 
{ 
    case TypeCode.Byte: 
    case TypeCode.SByte: 
    case TypeCode.Int16 
    case TypeCode.UInt16: 
    case TypeCode.Int32: 
    case TypeCode.UInt32: 
    case TypeCode.Int64: 
    case TypeCode.UInt64: 
    case TypeCode.Single: 
    case TypeCode.Double: 
    case TypeCode.Decimal: 
     Console.WriteLine("Numeric"); 
     break; 
    case TypeCode.Boolean: 
     Console.WriteLine("Bool"); 
     break; 
    case TypeCode.DateTime: 
     Console.WriteLine("DateTime"); 
     break; 
    case TypeCode.String: 
     Console.WriteLine("String"); 
     break; 
    case TypeCode.Empty: 
     Console.WriteLine("Null"); 
     break; 
    default: // TypeCode.DBNull, TypeCode.Char and TypeCode.Object 
     Console.WriteLine("Unknown"); 
     break; 
} 

如果TypeCode不符合您的需求,那麼您可以簡單地將列類型轉換爲您自己的自定義枚舉,如John's answer中所述。

+0

我可以返回SomeEnum值而不是寫cout。看起來不錯。 – 2010-06-22 23:58:57

+0

+1謝謝,不知道你可以像這樣切換內置類型 - 直到現在我不得不爲此使用自定義字典 – mfeineis 2014-01-20 14:00:06

1

你可以使用:

var types = new Dictionary<Type, SomeEnum>() 
{ 
    { typeof(int), SomeEnum.Numeric }, 
    { typeof(long), SomeEnum.Numeric }, 
    { typeof(string), SomeEnum.String }, 
    ... 
}; 

Func<Type, object, SomeEnum> getTypeEnum = (type, obj) => 
{ 
    var result = types.ContainsKey(type) 
        ? types[type] 
        : SomeEnum.Unknown; 
    if (obj == null || obj is DBNull) 
    { 
     result = SomeEnum.Null; 
    } 

    return result; 
}; 

... 

var e = getTypeEnum(col.DataType, row[col]); 
+0

這也是我的解決方案。只有17 [允許的類型](http://msdn.microsoft.com/en-us/library/system.data.datacolumn.datatype.aspx)。 – 2010-06-22 22:09:54

+0

我喜歡類型推理,lambda和對象構造的蓬勃發展。 :) – 2010-06-23 00:00:14

相關問題