2015-03-22 6 views
0

Я читал, что рекомендуется использовать функции вместо предикатов в методах расширения, поэтому я пытаюсь это сделать.Как использовать функцию в качестве параметра в методе расширения?

public static void Insert<T>(this ObservableCollection<T> paramOC, T NewElement, Func<T, T, bool> condition) 
     { 
      //code 
     } 

Я пытаюсь использовать таким образом:

myOC.Insert(myNewElement, e=>e.Name.CompareTo(myNewElement.Name) > 0)); 

Но я получаю сообщение об ошибке, которое говорит о том, что удаление System.Func не берет 1 аргумент.

Однако, если я использую предикат для функции, он работает.

Что мне не хватает?

спасибо.

ответ

3

Вам нужно Func<T,bool> (который принимает один аргумент и возвращает bool), не Func<T,T,bool>

Predicate<T> работает, потому что он принимает один аргумент и возвращает bool, поэтому он совпадает с выражением лямбда. Func<T,T,bool> ожидает два аргумента и возвращает bool, который не совпадает с вашим выражением, следовательно, ошибка.

1

Ваш Func<T,T,bool> принимает 2 параметра и возвращает bool

У вас есть два Choise

  1. , как Selman22 говорит изменить его Func<T,bool>
  2. называют его (e1,e2) => ..
Смежные вопросы