Вам нужен делегат Predicate<Turbine>
.Этот делегат представляет метод со следующей подписью:
bool Method(Turbine turbine)
Вы должны написать метод, подобный этому:
public List<Turbine> GetTurbines(Predicate<Turbine> predicate) {
var list = new List<Turbine>();
foreach (var turbine in newTur) {
if (predicate(turbine)) {
list.Add(turbine);
}
}
return list;
}
Обратите внимание на часть if (predicate(turbine))
, там я в основном вызываю методэто передается внутрь. Если метод возвращает true, я добавляю его в список.
Таким образом, вы можете передать метод, подобный этому, в GetTurbines
, чтобы получить все турбины с доступностью более 90:
bool Over90Availability(Turbine turbine) {
return turbine.Availability > 90;
}
// ...
var list = GetTurbines(Over90Availability);
Вы можете переписать метод с помощью лямбда-выражения:
var list = GetTurbines(turbine => turbine.Availability > 90);
Слово turbine
перед =>
является именем параметра.Все, что после =>
- это возвращаемое вами значение.
Надеюсь, вы понимаете, как это работает сейчас.
Фактически, вы только что заново изобрели колесо, создав GetTurbine
.Существует метод расширения, называемый Where
в System.Linq.Enumerable
, который в основном является тем же:
var list = newTur.Where(turbine => turbine.Availability > 90).ToList();