C# 为什么不是';这段代码不是在编译吗?

C# 为什么不是';这段代码不是在编译吗?,c#,.net,generics,types,C#,.net,Generics,Types,我正在编写一个方法来生成一个DataTable,将一个通用IEnumerable作为数据源。如果没有值,我尝试在字段上设置默认值,代码如下: private void createTable<T>(IEnumerable<T> MyCollection, DataTable tabela) { Type tipo = typeof(T); foreach (var item in tipo.GetFiel

我正在编写一个方法来生成一个DataTable,将一个通用IEnumerable作为数据源。如果没有值,我尝试在字段上设置默认值,代码如下:

private void createTable<T>(IEnumerable<T> MyCollection, DataTable tabela) 
        {
            Type tipo = typeof(T);

            foreach (var item in tipo.GetFields() )
            {
                tabela.Columns.Add(new DataColumn(item.Name, item.FieldType));
            }

            foreach (Pessoa recordOnEnumerable in ListaPessoa.listaPessoas)
            {
                DataRow linha = tabela.NewRow();

                foreach (FieldInfo itemField in tipo.GetFields())
                {
                    Type typeAux = itemField.GetType();

                    linha[itemField.Name] =
                        itemField.GetValue(recordOnEnumerable) ?? default(typeAux); 

                }
            }
        }
private void createTable(IEnumerable MyCollection,DataTable选项卡)
{
tipo型=T型;
foreach(tipo.GetFields()中的变量项)
{
tabela.Columns.Add(新数据列(item.Name,item.FieldType));
}
foreach(ListaPessoa.listaPessoas中的Pessoa recordOnEnumerable)
{
DataRow linha=tabela.NewRow();
foreach(tipo.GetFields()中的FieldInfo itemField)
{
键入typeAux=itemField.GetType();
linha[itemField.Name]=
itemField.GetValue(recordOnEnumerable)??默认值(typeAux);
}
}
}
它抛出了以下错误:

找不到类型或命名空间名称“typeAux”(是否缺少using指令或程序集引用?)


为什么??函数“Default(Type)”不应该返回该类型的默认值吗?

Default
语句不适用于
System.Type

尽管如此,似乎更合适的做法是省略该选项,直接使用
DBNull

linha[itemField.Name] = itemField.GetValue(recordOnEnumerable) ?? DBNull.Value;

如果值为
null
,则将结果设置为
null
(在
数据行中为
DBNull.value
)似乎是合适的。

对于引用类型和值类型,返回null如何

public static object GetDefault(Type type)
{
   if(type.IsValueType)
   {
      return Activator.CreateInstance(type);
   }
   return null;
}

引用:

default()
需要命名类型,而不是
类型
引用。例如,
default(int)
。但这是否要求int、boolean等类型声明为Nullables?..@WilnerAvila No-
itemField.GetValue
仅在值实际为null时返回null。int、bool等永远不会发生