2010-11-23 8 views
2

これは、1-1 Table.Column-Class.Propertyを自動的に照合する処理の一部です。私はlisted hereのようにそれぞれの可能な基底型の基底をカバーしようとしています。私はORMの作業に取り組んできましたが、現在はId = row["Id"] as intをやっている環境に戻ってきましたが、キャストのそのような強引なやり方ではなく、プロパティの属性を使ってDataTable.ExtractAs<MyClass>これらの属性に基づいてIList<MyClass>を作成しようとします。SqlDataTypeをC#Enumにキャストする

質問:すべての整数型をカバーするC#列挙型へのSqlDataTypeからのキャストを処理する良い方法はありますか?

今、私はこれをやっている:

internal static bool TrySetValue<T>(T t, PropertyInfo property, DataRow row, string columnName) 
{ 
    Type propertyType = property.PropertyType; 

    // other logic and unique cases 

    if (propertyType.IsEnum 
     && Enum.GetUnderlyingType(propertyType) == value.GetType()) 
    { 
     property.SetValue(t, value, null); 
     return true; 
    } 
} 

はこのやり過ぎですか?これを行うより良い方法はありますか?私はPropertyInfo内のこれらの整数型に対処するメンバーは見当たりません。

答えて

2

あなたが列挙型にSByteからの変換、ByteInt16UInt16Int32UInt32Int64UInt64を処理するEnum.ToObject(object)使用することができます十分

if (propertyType.IsEnum) { 
    property.SetValue(Enum.ToObject(value)); 
} 
+0

良いが...、 – hunter

関連する問題