匿名传递列名的泛型列表的列的总和

本文关键字:列表 泛型 | 更新日期: 2023-09-27 18:20:26

我的代码就像这个

 private static void ShowSum(Label lbl, IEnumerable<dynamic> list, string columnName)
    {
        lbl.Text = list.Sum(x => x.columnName).ToString();
    }

每次调用此函数时,我都试图获取特定列的总和,列名将作为参数传递给此函数。到目前为止,这还不起作用,因为columnName被解释为特定列名的字符串整数。实现这一目标的正确方法是什么?

匿名传递列名的泛型列表的列的总和

您需要使用反射从动态对象中获取一个名称为的属性

lbl.Text = list.Sum(x => x.GetType().GetProperty(columnName).GetValue(x, null)).ToString();

但我建议您使用强类型而不是动力学。至少您将能够在编译时而不是运行时捕获一些错误。

如果您知道在运行时键入列表:

private static void ShowSum<T>(Label lbl, IEnumerable<T> list, Func<T, int> columnMapper)
    {
        lbl.Text = list.Sum(x => columnMapper(x)).ToString();
    }