次のコードがあります。
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;
}
}
Enumtype 、この場合はのフィールドにたどり着いたら、NameSpace.MyEnum何か特別なことをしたいと思います。SetValueデータベースからの値が「m」であり、の値Enumが「Mr」であるため、単純にできません。したがって、別のメソッドを呼び出す必要があります。知っている!レガシーシステムですよね?
PropertyInfoでは、アイテムが特定の列挙型であることをどのように判断すればよいのでしょうか?
したがって、上記のコードでは、最初にPropertyInfo型が特定の列挙型であるかどうかを確認し、そうである場合はメソッドを呼び出し、そうでない場合は単に実行を許可SetValueします。