2010-11-23 14 views
2

Dies ist Teil eines Prozesses zu tun 1-1 Table.Column-Class.Property Matching automatisch. Ich versuche, die Basen für jeden möglichen Basistyp wie listed here zu decken. Ich habe mehr und mehr mit ORM gearbeitet, aber jetzt bin ich wieder in eine Umgebung zurückgekehrt, in der sie gerade arbeiten Id = row["Id"] as int, aber anstatt diese brutale Art des Castings zu verwenden, habe ich nur Attribute auf den Eigenschaften verwendet, so dass ich DataTable.ExtractAs<MyClass> schreiben konnte Versuche zu erstellen und IList<MyClass> basierend auf diesen Attributen.Casting SqlDataType zu C# Enum

Meine Fragen ist: Gibt es eine bessere Möglichkeit, Casting von einem SqlDataType zu einem C# -Enum, die alle integralen Typen umfasst?

Im Moment mache ich das:

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; 
    } 
} 

diese übertrieben? Gibt es einen besseren Weg, dies zu tun? Ich sehe kein Mitglied innerhalb PropertyInfo, das diese integralen Typen anspricht.

Antwort

2

können Sie Enum.ToObject(object) verwenden, die Umwandlung von SByte behandelt, Byte, Int16, UInt16, Int32, UInt32, Int64 und UInt64 zu einem Enum:

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

gut genug ..., – hunter