我有一個物件串列,每個物件有兩個屬性。我想根據它們的一個屬性使用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>'。
我究竟做錯了什么?有人有什么建議嗎?
uj5u.com熱心網友回復:
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);
uj5u.com熱心網友回復:
List<T>.FindAll將委托作為輸入,特別是一個Predicate<T>.
的Predicate<T>代表可以被定義為如下:
private bool FindShortTowers(Tower t)
{
return t.Height <= 25;
}
// then, in some other method:
Predicate<Tower> predicate = FindShortTowers;
var shortTowers = towers.FindAll(predicate);
然而,習慣上使用 lambda 運算式而不是顯式定義型別的委托Predicate<T>:
var shortTowers = towers.FindAll(t => t.Height <= 25);
您還可以使用Enumerable.Where from System.Linq:
var shortTowers = towers.Where(t => t.Height <= 25);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/347539.html
上一篇:MicrosoftDI:如果兩個不同的類在其建構式引數中采用相同的型別,我如何從配置中為它們注入不同的值?
下一篇:從注冊表項路徑中提取根配置單元
