c# – 如何使这种扩展方法更通用?

前端之家收集整理的这篇文章主要介绍了c# – 如何使这种扩展方法更通用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个大脑放屁试图使下面的方法更通用,以便任何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应该是一个相当有用的东西.

猜你在找的C#相关文章