【发布时间】:2009-10-08 23:08:12
【问题描述】:
我有以下代码:
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;
}
}
当我到达Enum 类型的字段时,或者在本例中为NameSpace.MyEnum,我想做一些特别的事情。我不能简单地SetValue,因为来自数据库的值可以说是“m”,Enum 中的值是“Mr”。所以我需要调用另一种方法。我知道!旧系统对吗?
那么我如何确定PropertyInfo 项何时属于特定枚举类型?
所以在上面的代码中,我想首先检查PropertyInfo 类型是否属于特定枚举,如果是则调用我的方法,如果不是则简单地允许SetValue 运行。
【问题讨论】:
-
不使用 Activator.CreateInstance
(),只需将“new”约束添加到您的泛型:“where T : class, new()”。然后只需使用“T entity = new T()”。这样,您可以在编译时强制要求无参数构造函数。 -
@Brannon,谢谢,这是一个很好的提示。当我开始工作时会做。谢谢。
标签: c# enums propertyinfo