Tengo el siguiente código:¿Cómo saber si un PropertyInfo es de un tipo de enumeración particular?
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;
}
}
Cuando llego a un campo de tipo Enum
, o en este caso NameSpace.MyEnum
, quiero hacer algo especial. No puedo simplemente SetValue
porque el valor que proviene de la base de datos es digamos "m" y el valor en el Enum
es "Mr". Entonces necesito llamar a otro método. ¡Lo sé! Sistemas heredados ¿verdad?
Entonces, ¿cómo puedo determinar cuándo un artículo PropertyInfo
es de un tipo de enumeración particular?
Así que en el código anterior me gustaría comprobar primero si el tipo PropertyInfo
es de una especificación y si es entonces llamar a mi método y si no, simplemente permita SetValue
ejecutar.
En lugar de utilizar Activator.CreateInstance(), simplemente agregue la restricción "nueva" a su genérico: "donde T: clase, nuevo()". Entonces solo usa "T entidad = nueva T()". De esta forma, puede exigir la necesidad de un constructor sin parámetros en tiempo de compilación. –
Brannon
@Brannon, gracias, eso es un gran consejo. lo haré cuando entre al trabajo Gracias. – griegs