为什么不是';t编译此代码
本文关键字:编译 代码 为什么不 | 更新日期: 2023-09-27 18:28:21
我正在编写一个方法,以通用IEnumerable作为数据源来生成DataTable。如果没有值,我试图在字段上设置一个默认值,代码如下:
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);
}
}
}
它抛出了这个错误:
找不到类型或命名空间名称"typeAux"(是否缺少using指令或程序集引用?)
为什么?函数"Default(Type)"不应该返回该类型的默认值吗?
对于引用类型返回null,对于值类型返回Activator.CreateInstance如何
public static object GetDefault(Type type)
{
if(type.IsValueType)
{
return Activator.CreateInstance(type);
}
return null;
}
参考:默认(类型)的程序等效
default
语句不适用于System.Type
。
话虽如此,似乎更合适的做法是忽略这一点,直接使用DBNull
:
linha[itemField.Name] = itemField.GetValue(recordOnEnumerable) ?? DBNull.Value;
如果该值为null
,则将结果设置为null
(在DataRow
中为DBNull.Value
)似乎是合适的。