2010-11-23 5 views
2

Cela fait partie d'un processus pour faire correspondre 1-1 Table.Column-Class.Property automatiquement. J'essaye de couvrir les bases pour chaque type de base possible comme listed here. Je travaille de plus en plus avec ORM mais maintenant je suis retourné à un environnement où ils font Id = row["Id"] as int mais au lieu de faire cette façon de lancer la force brute, j'ai juste utilisé des attributs sur les propriétés pour que je puisse écrire DataTable.ExtractAs<MyClass> qui tente de créer et IList<MyClass> en fonction de ces attributs.Coulée SqlDataType à C# Enum

Mes questions sont: Y a-t-il une meilleure façon de gérer la conversion d'un SqlDataType à un enum C# qui couvre tous les types entiers?

En ce moment je fais ceci:

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

Est-ce surpuissant? Y a-t-il une meilleure manière de faire cela? Je ne vois aucun membre au sein de PropertyInfo qui adresse ces types intégrales.

Répondre

2

Vous pouvez utiliser Enum.ToObject(object) qui se chargera de la conversion de SByte, Byte, Int16, UInt16, Int32, UInt32, Int64 et UInt64 à un ENUM:

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

assez bon ..., – hunter