我有一个大脑放屁试图使下面的方法更通用,以便任何List< T>可以传入columnValues参数.这就是我所拥有的:
public static DataRow NewRow(this DataTable dataTable,List<string> columnValues) { DataRow returnValue = dataTable.NewRow(); while (columnValues.Count > returnValue.Table.Columns.Count) { returnValue.Table.Columns.Add(); } returnValue.ItemArray = columnValues.ToArray(); return returnValue; }
我可以将其更改为List< object>并在将原始列表传递给方法之前将其转换,但我确信有更好的选择:-)
编辑:
弗兰克的帖子让我重新思考这一点.在大多数情况下,源列表< T>将是List< object>因为列值很可能是不同的类型.
对于我最初使用的List< string>是有道理的,因为我是从CSV解析创建一个数据集,这是该点的所有文本.
解决方法
你基本上没有运气,因为DataRow的Item数组是一个对象数组,也就是说,最终你只能传入对象列表.
如果您输入列表的通用参数,则列表中的所有项都必须属于该类型,这几乎不可能有用.
话虽如此,为了获得众多不同类型的列,您可以更改扩展方法以接受实例化匿名类型的对象:
table.NewRow(new { A = "Hello",B = 1,C = DateTime.Now })
有了帮助将匿名类型值转换为字符串,对象字典by reflection or by a dynamic method应该是一个相当有用的东西.