2016-03-28 2 views
1

Я пытаюсь создать метод расширения, который «расширяется» на IEnumerable типа, принимает выражение как параметр и возвращает IEnumerable того же типа.Пользовательское выражение как параметр и возвращающее IEnumerable общего типа

public static IEnumerable<T> CustomExtension<T>(this IEnumerable<T> cities, Expression<Func<T, bool>> predicate) 
{ 
    return Enumerable.Where(cities, predicate); 
    //the line above is wrong, doesn't compile, but it explains my intentions...   
} 

Затем вызовите его следующим образом:

var bigCities = cities.CustomExtension(c => c.occupants >= 1000000); 

ИЛИ

var coldCities = cities.CustomExtension(c => c.avgTemp <= 20); 

ПРИМЕЧАНИЕ: Это не только для "городских" объектов, план, чтобы сохранить его родовое поэтому я могу использовать тот же метод для аналогичных типов

Заранее спасибо ...

+4

Итак, что не так, просто используя 'Where'? Также ваш пример должен быть «города. Где (предикат)». – DavidG

+1

В основном вы описываете метод расширения 'Where'. – Nkosi

+0

Какова цель этого расширения. Я спрашиваю, потому что в настоящее время функциональность, которую вы описываете, уже существует. Есть ли еще одна цель, которую вы пытаетесь достичь? – Nkosi

ответ

1
public static IEnumerable<T> CustomExtension<T>(this IEnumerable<T> cities, Func<T, bool> predicate) 
    { 
     return cities.Where(x => predicate(x)); 
    } 
+0

Так что же это делает выше, просто используя 'Where'? – DavidG

+0

Эй, я просто отвечаю на вопросы. – Jace

+0

Тогда я предлагаю вам ответить на что-то полезное вместо этого :) – DavidG