我需要根據DataTable中DataColumns的類型來格式化輸出。如何確定DataColumn的類型是數字,字符串還是日期時間?
具體而言,我需要映射內置原語類型(int,字符串,十進制,日期時間等),以:
- SomeEnum.Numeric
- SomeEnum.Bool
- SomeEnum.DateTime
- SomeEnum.String
- SomeEnum.Unknown
- SomeEnum.Null
我該怎麼做?
我需要根據DataTable中DataColumns的類型來格式化輸出。如何確定DataColumn的類型是數字,字符串還是日期時間?
具體而言,我需要映射內置原語類型(int,字符串,十進制,日期時間等),以:
我該怎麼做?
如果內置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中所述。
你可以使用:
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]);
這也是我的解決方案。只有17 [允許的類型](http://msdn.microsoft.com/en-us/library/system.data.datacolumn.datatype.aspx)。 – 2010-06-22 22:09:54
我喜歡類型推理,lambda和對象構造的蓬勃發展。 :) – 2010-06-23 00:00:14
我可以返回SomeEnum值而不是寫cout。看起來不錯。 – 2010-06-22 23:58:57
+1謝謝,不知道你可以像這樣切換內置類型 - 直到現在我不得不爲此使用自定義字典 – mfeineis 2014-01-20 14:00:06