Как преобразовать Выражение <Func <T, bool>> к Предикату <T>

Возможно, это - просто что-то, что должно быть извлечено из опыта; а именно, опыт возвращения к Вашему собственному коду после шести месяцев и попытки разработать то что, черт возьми, Вы думали (или что Вы шли), когда Вы записали его. Это, конечно, убедило меня, что комментарии не были такой плохой идеей.

48
задан Abel 23 March 2011 в 15:11
поделиться

3 ответа

Func<T, bool> func = expression.Compile();
Predicate<T> pred = t => func(t);

Изменить: согласно комментариям у нас есть лучший ответ для второй строки:

Predicate<T> pred = func.Invoke;
56
ответ дан 26 November 2019 в 18:39
поделиться

Другие варианты, которые не были упомянуты:

Func<T, bool> func = expression.Compile();
Predicate<T> predicate = new Predicate<T>(func);

Это генерирует тот же IL, что и

Func<T, bool> func = expression.Compile();
Predicate<T> predicate = func.Invoke;
25
ответ дан 26 November 2019 в 18:39
поделиться

Я не вижу необходимости в этом методе. Просто используйте Where ().

 var sublist = list.Where( expression.Compile() ).ToList();

Или, что еще лучше, определите выражение как встроенное лямбда-выражение.

 var sublist = list.Where( l => l.ID == id ).ToList();
26
ответ дан 26 November 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: