2015-02-18 4 views
0

Я пытаюсь написать метод расширения, который принимает объект типа T и возвращает IEnumerable<T>.Как написать общий метод расширения, который обертывает объект в перечислимом?

Вот моя первая попытка:

internal static class ObjectExtensions<T> 
{ 
    public static IEnumerable<T> Yield(this T item) 
    { 
     yield return item; 
    } 
} 

Эта функция работает, но только если я пишу ObjectExtensions<Foo>.Yield(foo): foo.Yield() не решает.

Есть ли способ объявить метод расширения, который возвращает общий тип, основанный на типе ввода?

(я с тех пор обнаружил Enumerable.Repeat соответствует моим исходным требованиям, так что этот вопрос больше любопытства.)

+2

взять непатентованные образцы класса. Только ваши методы должны быть общими –

+1

Код, который у вас не должен компилироваться. Методы расширения не могут быть в родовых классах, и компилятор должен обходиться ошибкой с сообщением об этом. – Servy

ответ

6

Вам не нужно указать класс в качестве родового, только метод Удлинитель.

internal static class ObjectExtensions 
{ 
    public static IEnumerable<T> Yield<T>(this T item) 
    { 
     yield return item; 
    } 
} 
+0

Не знаю, почему я забыл попробовать это. Благодаря! – ehdv

Смежные вопросы