【问题标题】:cannot convert anonymous method to type 'delegate'无法将匿名方法转换为类型“委托”
【发布时间】:2018-11-23 07:56:38
【问题描述】:

我有一个绑定到Equin.ApplicationFramework 的“DataGridView”的“BindingListView 视图”。根据文档过滤如下:

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的解决方法,没有成功。

【问题讨论】:

  • 使用接口...还有ApplyFilterView是如何定义的
  • 请注意,委托中的参数类型需要与您为BindingListView<T> 选择的泛型类型参数相同。因此,您尝试使用 delegate (object item) 在我看来有点不对劲。

标签: c# delegates


【解决方案1】:

看起来该方法需要Predicate<T>。您是否尝试过使用谓词语法?

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

另外,让所有类实现一个通用接口并使用它来访问Code 会是一个更好的设计。如果无法使用反射,您至少应该为每个不同的类型缓存PropertyInfo,因为查询类型信息非常慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2013-01-30
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多