我在代码行的标题中提到了异常
values[i] = Props[i].GetValue(item, null);
我不确定是什么导致这种情况。任何帮助,将不胜感激。
public static DataTable ToDataTable<T>(List<T> items)
{
DataTable dataTable = new DataTable(typeof(T).Name);
PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo prop in Props)
{
var type = (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>) ? Nullable.GetUnderlyingType(prop.PropertyType) : prop.PropertyType);
dataTable.Columns.Add(prop.Name, type);
}
foreach (T item in items)
{
var values = new object[Props.Length];
for (int i = 0; i < Props.Length; i++)
{
values[i] = Props[i].GetValue(item, null);
}
dataTable.Rows.Add(values);
}
return dataTable;
}
答案 0 :(得分:2)
如果此行抛出异常
values[i] = Props[i].GetValue(item, null);
...那么这意味着你有一个需要参数的属性。在c#中,获取参数的唯一属性类型是indexer。我的猜测是你应该从循环中排除索引器。
请参阅this question,告诉您如何检测索引器。
您可以通过更改一行来解决此问题。改变这个......
PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
......对此......
PropertyInfo[] Props = typeof(T)
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.GetIndexParameters == null))
.ToArray();
答案 1 :(得分:0)
问题实际上是我传入方法的数据(字符串列表)。似乎GetValue()方法正在寻找一个对象。我创建了一个带有字符串属性的类,并更改了我传递给类的列表类型,并将类中的属性设置为我传递给foreach循环中列表的字符串。对不起,如果只是试图解释我是如何解决这个问题没有意义,但问题可能已经解决了很多方面。谢谢,全部。