代码之家  ›  专栏  ›  技术社区  ›  roozbeh S

无法将匿名方法转换为“委托”类型

  •  -1
  • roozbeh S  · 技术社区  · 6 年前

    我将“bindingListView视图”绑定到的“dataGridView” Equin.ApplicationFramework . 根据文档过滤如下:

    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;
    
        }
    );
    

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

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

    我也试过解决方法 here 没有成功。

    1 回复  |  直到 6 年前
        1
  •  1
  •   TheEvilPenguin    6 年前

    看起来这个方法需要 Predicate<T> . 你试过使用谓词语法吗?

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

    或者,让所有类实现一个公共接口并使用它来访问,这将是一个更好的设计。 Code . 如果没有办法使用反射,至少应该缓存 PropertyInfo 对于用作查询类型信息的每个不同类型而言,速度都相当慢。