我的代码就像这样
private static void ShowSum(Label lbl, IEnumerable<dynamic> list, string columnName)
{
lbl.Text = list.Sum(x => x.columnName).ToString();
}
我试图在每次调用此函数时获取特定列的总和,列名将作为参数传递给此函数。截至目前,这不起作用,因为columnName
被解释为特定列名的字符串intead。实现这一目标的正确方法是什么?
答案 0 :(得分:3)
您需要使用反射来通过它的名称来获取动态对象的属性:
lbl.Text = list.Sum(x => x.GetType().GetProperty(columnName).GetValue(x, null)).ToString();
但我建议你使用强类型而不是动态。至少你可以在编译时而不是运行时捕获一些错误。
答案 1 :(得分:1)
如果您知道运行时的列表类型:
private static void ShowSum<T>(Label lbl, IEnumerable<T> list, Func<T, int> columnMapper)
{
lbl.Text = list.Sum(x => columnMapper(x)).ToString();
}