2010-06-22 2 views

답변

10

를 내장 TypeCode 열거 사용자의 요구 사항을 충족하는 경우 다음 방금 GetTypeCode를 호출 한 다음 DataColumn과의 DataType 속성을 읽을 수,

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

나는 cout을 쓰는 대신 SomeEnum 값을 반환 할 수 있습니다. 좋아 보인다. –

+0

+1 감사합니다. 내장형 유형을 전환 할 수 있다는 것을 몰랐습니다. 지금까지이 사용자 정의 사전을 사용해야했습니다. – mfeineis

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). –

+0

저는 형식 유추, 람다 및 대상 구성의 번영을 좋아합니다. :) –

관련 문제