Mam następujący kod:Jak określić, czy właściwość PropertyInfo ma określony typ wyliczeniowy?
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;
}
}
Kiedy się do pola typu Enum
, lub w tym przypadku NameSpace.MyEnum
, chcę zrobić coś specjalnego. Nie mogę po prostu SetValue
, ponieważ wartość pochodząca z bazy danych to np. "M", a wartość w Enum
to "Mr". Muszę więc zadzwonić inną metodą. Wiem! Starsze systemy w porządku?
Jak ustalić, czy pozycja PropertyInfo
jest określonego typu wyliczenia?
Tak więc w powyższym kodzie chciałbym najpierw sprawdzić, czy typ PropertyInfo
jest specyficzny i jeśli jest to wtedy zadzwoń do mojej metody, a jeśli nie, po prostu pozwól, aby uruchomił się SetValue
.
Zamiast Activator.CreateInstance(), po prostu dodaj "nowe" ograniczenie do twojego generycznego: "where T: class, new()". Następnie użyj "T entity = new T()". W ten sposób można wymusić konieczność konstruktora bez parametrów w czasie kompilacji. –
Brannon
@Brannon, dziękuję, to świetna wskazówka. zrobię, kiedy wejdę do pracy. dzięki. – griegs