我有一个对象,我创建了一个实体(T)使用反射。对象是一个表的实现。它包含一个列列表,我使用反射从实体中提取它们的属性:
public class Generic_Table<T> : Table
{
...// in ctor
type = this.GetType().GetGenericArguments()[0]; // type of T
BuildColumns(type);
private void BuildColumns(Type type)
{
PropertyInfo[] properties = type.GetProperties();
Columns = new KeyValuePair<string, Type>[properties.Count()];
int i = 0;
foreach (PropertyInfo property in properties)
{
Columns[i++] = new KeyValuePair<string, Type>(property.Name, property.PropertyType);
}
}
我正在寻找一种将PropertyType
值转换为可空类型的方法,以便列中的Type
值将是int?
,例如,某些属性具有int
PropertyType
价值。
这将满足您的需求:
Type nullableType = typeof(Nullable<>).MakeGenericType(property.PropertyType);
MakeGenericType
方法接受泛型类型参数的params数组。查看文档了解更多细节:
- http://msdn.microsoft.com/en-us/library/system.type.makegenerictype.aspx
此外,本文还有一个很好的例子,与您在这里所做的类似:
- http://msdn.microsoft.com/en-us/library/b8ytshk6.aspx