2010-10-26 5 views
2

Я немного расплывчатый в новом материале Action/Func/Variance/CoVariance, который, вероятно, мне нужен.Общий делегат параметра?

Я хочу, чтобы иметь возможность передать делегат в качестве параметра методу, который принимает строку и возвращает bool. Проблема в том, что я не могу использовать типизированный делегат или интерфейс, поскольку он будет использоваться в разных библиотеках, которые не делят библиотеки, и оба будут вызваны третьей.

В общем, я хочу, чтобы делегат был выведен его входным и возвращаемым типом.

Так это будет, как:

delegate bool IncludeItemDelegate(string item); 

ClassA.FetchItems(int someParameter,includeItemDelegate); 
ClassB.FetchItems(int someParameter,string someOtherParam,includeItemDelegate); 

Где доля А и оленья кожа какие-либо библиотеки, это может быть сделано?

ответ

6

Predicate встроен, а также сигналы Намерение:

ClassA.FetchItems(int someParameter, Predicate<string> filter); 
+0

Да, это лучше, чем Func . – Lunivore

+0

Ах, немного более эзотерический, возможно, но, похоже, подходит – Homde

7

Как насчет Func<string,bool>?

+1

Ах, так что как вы его используете, это было легко, спасибо! :) – Homde

0

Также можно пройти предиката как лямбда

class A 
{ 
    static public IEnumerable<string> FetchItems(int max, Predicate<string> filter) 
    { 
     var l = new List<string>() {"test", "fest", "pest", "häst"}; 
     return l.FindAll(filter).Take(max); 
    } 
} 

как этот

var res = A.FetchItems(2, s => s.EndsWith("est")); 
+0

ах, это хороший бонус, спасибо – Homde