Я хотел написать метод расширения (для использования в текучем синтаксисе), так что если последовательность является:Должен ли я использовать доход при написании собственного расширения?
List< int> lst = new List< int>(){1,2,3 };
Я хочу повторить это 3 раза (к примеру). поэтому выход будет 123123123
я написал:
public static IEnumerable<TSource> MyRepeat<TSource>(this IEnumerable<TSource> source,int n)
{
return Enumerable.Repeat(source,n).SelectMany(f=>f);
}
И теперь я могу это сделать:
lst.MyRepeat(3)
выход:
Вопрос:
Должен ли я использовать Выход в методе расширения? Я пробовал yield return
, но он здесь не работает. Почему это, и я должен использовать его.
редактировать
После ответа Муравьев я изменил его:
public static IEnumerable<TSource> MyRepeat<TSource>(this IEnumerable<TSource> source,int n)
{
var k=Enumerable.Repeat(source,n).SelectMany(f=>f);
foreach (var element in k)
{
yield return element;
}
}
Но есть ли разница?
Объясните, что означает «не работает». –
@ant _Cannot неявно преобразовать тип 'System.Collections.Generic.IEnumerable' в 'TSource'. Явное преобразование существует (вы пропускаете листинг?) _ –
'yield return' используется только в низкоуровневой реализации, я думаю, что ваш код в порядке. –