我有这个,工作正常:
private void BindFilter(DropDownList ddl, IEnumerable<dynamic> items)
{
ddl.Items.Clear();
foreach (var item in items)
{
ddl.Items.Add(item.bodystyle.ToString());
}
}
我知道bodystyle是项目的属性。
是否可以通过将字符串作为变量传递来执行此操作,如下所示:
private void BindFilter(DropDownList ddl, string field, IEnumerable<dynamic> items)
{
ddl.Items.Clear();
foreach (var item in items)
{
ddl.Items.Add(item.{field}.ToString());
}
}
答案 0 :(得分:2)
您可以使用反射来实现这一目标:
private void BindFilter(DropDownList ddl, string field, IEnumerable<dynamic> items)
{
ddl.Items.Clear();
foreach (var item in items)
{
var propertyInfo = item.GetType().GetProperty(field);
var value = propertyInfo.GetValue(item, null);
ddl.Items.Add(value.ToString());
}
}
答案 1 :(得分:0)
不使用反射:
private void BindFilter(DropDownList ddl, Func<dynamic, string> getStringAction, IEnumerable<dynamic> items)
{
ddl.Items.Clear();
foreach (var item in items)
{
ddl.Items.Add(getStringAction(item));
}
}
你这样称呼它:
BindFilter(ddl, item => item.Field.ToString(), items);