无法将匿名方法转换为键入“委托”

时间:2018-11-22 23:25:11

标签: c# delegates

我有一个绑定到Equin.ApplicationFramework的'DataGridView'的'BindingListView View'。根据文档的过滤方式为:

View.ApplyFilter(
    delegate (SomeViewModel item)
    {
        return item.Code == textBox1.Text;

    }
);

我需要一个过滤器方法,无论item.Code == 'SomeText'中的项目类型如何,都可以过滤BindingListView,有什么方法可以实现?我想出了

View.ApplyFilter(
    delegate (object item)
    {
        return item.GetType().GetProperty("Code").GetValue(item).ToString() == textBox1.Text;

    }
);

不幸的是,它不起作用。我收到编译器错误:

  

无法将匿名方法转换为类型的“委托”,因为它不是   委托人类型

我也尝试了解决方法here,但没有成功。

1 个答案:

答案 0 :(得分:1)

该方法似乎需要一个Predicate<T>。您是否尝试过使用谓词语法?

View.ApplyFilter(i => (string)i.GetType().GetProperty("Code").GetValue(i) == "SomeText")

或者,使所有类都实现一个公共接口并使用该接口访问Code是一个更好的设计。如果无法使用反射,则应至少为每个不同的类型缓存PropertyInfo,因为查询类型信息非常慢。