在 List<T> 上使用 FindAll() 方法

0 .net c#

我有一个对象列表,每个对象都有两个属性。我想通过使用将其中一些根据其属性之一分类到另一个列表中FindAll()。请参阅下面的示例代码:

namespace Example {

    class Tower {
         public string name { get; set; }
         public int hight { get; set; }
    }

    class Program {
          static void Main (string[] args) {
                 List<Tower> towers = new List<Tower>();

                 towers.Add(new Tower() { Name = "tower1", Hight = 25 });
                 towers.Add(new Tower() { Name = "tower2", Hight = 50 });
                 towers.Add(new Tower() { Name = "tower3", Hight = 25 });

                 List<Tower> short_towers = towers.FindAll(new Tower() { Hight = 25 });
          }
     }
}
Run Code Online (Sandbox Code Playgroud)

但它总是说:

将 Example.Tower 转换为 System.Predicate<Example.Tower> 失败。

我究竟做错了什么?有人有什么建议吗?

Dav*_*idG 5

List<T>.FindAll需要一个委托作为其参数,而不是 的实例T。例如:

List<Tower> short_towers = towers.FindAll(t => t.Hight == 25);
Run Code Online (Sandbox Code Playgroud)

不过,也许,根据变量的名称,您希望所有塔都在 25 或以下:

List<Tower> short_towers = towers.FindAll(t => t.Hight <= 25);
Run Code Online (Sandbox Code Playgroud)