J'ai le code suivant:Comment savoir si un PropertyInfo est d'un type enum particulier?
public class DataReader<T> where T : class
{
public T getEntityFromReader(IDataReader reader, IDictionary<string, string> FieldMappings)
{
T entity = Activator.CreateInstance<T>();
Type entityType = entity.GetType();
PropertyInfo[] pi = entityType.GetProperties();
string FieldName;
while (reader.Read())
{
for (int t = 0; t < reader.FieldCount; t++)
{
foreach (PropertyInfo property in pi)
{
FieldMappings.TryGetValue(property.Name, out FieldName);
Type genericType = property.PropertyType;
if (!String.IsNullOrEmpty(FieldName))
property.SetValue(entity, reader[FieldName], null);
}
}
}
return entity;
}
}
Quand je reçois un champ de type Enum
, ou dans ce cas NameSpace.MyEnum
, je veux faire quelque chose de spécial. Je ne peux pas simplement SetValue
parce que la valeur provenant de la base de données est disons "m" et la valeur dans le Enum
est "Mr". Donc j'ai besoin d'appeler une autre méthode. Je connais! Les systèmes hérités, n'est-ce pas?
Alors, comment déterminer quand un article PropertyInfo
est d'un type d'énumération particulier? Donc, dans le code ci-dessus, je voudrais d'abord vérifier si le type PropertyInfo
est d'un spécification et si elle est alors appeler ma méthode et si non alors laissez SetValue
s'exécuter.
Au lieu d'utiliser Activator.CreateInstance(), ajoutez simplement la "nouvelle" contrainte à votre générique: "où T: class, new()". Ensuite, utilisez simplement "T entity = new T()". De cette façon, vous pouvez imposer le besoin d'un constructeur sans paramètre à la compilation. –
Brannon
@Brannon, merci c'est un bon conseil. fera quand je me mets au travail. Merci. – griegs