我有一个对象列表,每个对象都有两个属性。我想通过使用将其中一些根据其属性之一分类到另一个列表中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> 失败。
我究竟做错了什么?有人有什么建议吗?
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)