c# - 在 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>' 失败。
我究竟做错了什么?有人有什么建议吗?
解决方案
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);
推荐阅读
- python - pandas:获取第二行并将其放在第一行的末尾(并自动创建新列)
- tensorflow - 在 TensorFlow 中计算输出层的范数
- flutter - 控制多个相同类型的小部件,同时避免使用 GlobalKeys 列表
- php - 在 PHP 中设置许多具有相似名称和值的变量的最快方法
- simulation - Netlogo中简单汽车驾驶模型中墙壁碰撞程序中“NOBODY”的持续错误
- nginx - ffmpeg 拉取本地 rtmp 流失败
- python - 通过在 Python 3.7 中逐段计算单词的自定义数据结构
- c++ - 我应该将 malloc() 用于链接列表吗?
- checkbox - 如何使 Google 查询仅从两个不同的列中提取 TRUE 值
- visual-c++ - 为什么在编译向量时VS2017和VS代码不同?