首页 > 解决方案 > 在 List 上使用 FindAll() 方法

问题描述

我有一个对象列表,每个对象都有两个属性。我想根据其中一个属性使用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 });
          }
     }
}

但它总是说:

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

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

标签: c#.net

解决方案


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

List<Tower> short_towers = towers.FindAll(t => t.Hight == 25);

虽然也许,给定变量的名称,你想要所有塔 25 或以下:

List<Tower> short_towers = towers.FindAll(t => t.Hight <= 25);

推荐阅读