Рейтинг:
20
The_Unknown_Member
Оооо, я получил это... Я передаю анонимный метод параметру Predecate<t> этого метода. Разве я не прав?
Peter Vegter
Да, вы правы!
The_Unknown_Member
Спасибо!!!
Peter Vegter
Всегда пожалуйста! Спасибо за ответ и голосование.
The_Unknown_Member
Последний вопрос:как FindAll не принимает ничего, кроме логического значения? Я хочу знать эту конкретную деталь реализации. Это универсальный метод, но он работает только с логическими значениями, и когда я пытаюсь вернуть int, например, компилятор выдает ошибку: "не удается преобразовать лямбда-выражение в предполагаемый тип делегата, потому что некоторые типы возвращаемых данных в блоке не являются неявно конвертируемыми в тип возвращаемого делегата".
Делегат также является общим.
Peter Vegter
Спецификация 'FindAll' гласит: 'извлекает все элементы, соответствующие условиям, определенным указанным предикатом'.
Предикат-это метод делегата, который возвращает значение bool. Делегат является общим для передаваемого аргумента (int, float, double и т. д.), Но возвращаемое значение метода предиката всегда является "bool" - это как сокращение от " bool MatchMethod<T>". Таким образом, если вы укажете другое возвращаемое значение, вы получите ошибку компилятора точно так же, как когда вы делаете что-то подобное с "нормальным" методом:
тест на пустоту()
{
bool result = GetResult(); // ошибка! - GetResult() не возвращает bool.
}
инт метод getresult()
{
возврат 10;
}