将原始类型转换为可为空的对象

时间:2011-07-16 13:13:39

标签: c# reflection primitive-types

我有一个使用反射从实体(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值。

1 个答案:

答案 0 :(得分:3)

这将满足您的需求:

Type nullableType = typeof(Nullable<>).MakeGenericType(property.PropertyType);

MakeGenericType方法接受泛型类型参数的params数组。有关详细信息,请参阅文档:

此外,这篇文章有一个很好的例子,类似于你在这里做的事情: