use*_*076 2 .net c# reflection
我正在使用我在此站点上找到的通用DataTable to List转换方法:
private List<T> ConvertToList<T>(DataTable dt)
{
var columnNames = dt.Columns.Cast<DataColumn>()
.Select(c => c.ColumnName)
.ToList();
var properties = typeof(T).GetProperties();
return dt.AsEnumerable().Select(row =>
{
var objT = Activator.CreateInstance<T>();
foreach (var pro in properties)
{
if (columnNames.Contains(pro.Name))
{
pro.SetValue(objT, row[pro.Name], null);
}
}
return objT;
}).ToList();
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好,除非我在pro.SetValue中为整数字段命中空值.失败的原因是因为如果第二个参数为null,pro.SetValue将为类型设置默认值,如下所示:pro.SetValue(objT,null,null).但我的行[IdColumn]返回空对象{}而不是null.我得到的错误是:
"System.DBNull"类型的对象无法转换为"System.Nullable"1 [System.Int32]类型.
当使用int?
和
"System.DBNull"类型的对象无法转换为类型[System.Int32]'.
使用时int
如何处理此案例?
首先检查null:
pro.SetValue(objT, row.IsNull(pro.Name) ? null : row[pro.Name], null);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1045 次 |
| 最近记录: |