gpt4 book ai didi

C# 参数计数不匹配将 List 转换为 DataTable

转载 作者:行者123 更新时间:2023-11-30 23:07:56 24 4
gpt4 key购买 nike

我在代码行的标题中得到了异常

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;
}

最佳答案

如果这一行抛出异常

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();

关于C# 参数计数不匹配将 List 转换为 DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46855438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com