Страницы

Поиск по вопросам

понедельник, 3 июня 2019 г.

Predicate и Func в качестве T

Есть List< Func< string>> нужно вызвать List.RemoveAll().Туда нужно передать Predicate< T>. нужно удалить только определнные функции. На MSDN Видел пример с Point, но попытка переделать аналогично под Func не получается. В чем проблема?
List> _list; public MainWindow() { _list = new List>(); _list.Add(this.test); _list.Add(this.test2); _list.Add(this.test); _list.Add(this.test2); _list.Add(this.test);
Predicate> pre = ValidateFunc(test2,nameof(test2));// тут функция и подчеркивается с ошибкой }
private static bool ValidateFunc(Func obj,string targetName) { return targetName == nameof(obj); }
string test() { textBox.Text += " 2"; return ""; } string test2() { textBox.Text += " 3"; return ""; }
Ошибка:Не удается неявно преобразовать тип "bool" в "System.Predicate< System.Func< string>>"
Если как на MSDN без параметров то ошибка такая: Нет перегруженного метода для "ValidateFunc", который соответствует делегату "Predicate< Func< string>>"


Ответ

Я предлагаю такой вариант:
Predicate> pre = item => item == this.test;
В частности, при использовании этого предиката в качестве аргумента метода _list.RemoveAll, из коллекции _list будут удалены все вхождения метода test
Либо так, если вместо ссылки на метод вы желаете использовать строку с именем метода:
Predicate> pre = item => item.Method.Name == "test";
А назначение вашего метода ValidateFunc мне понять не удалось. Вы в нем сравниваете строку targetName с nameof(obj) (то есть со строковой константой "obj").

Комментариев нет:

Отправить комментарий