Исках да създам метод за разширение, който ефективно да обвива единични обекти като IEnumerables. Това беше, за да се избегнат случаите, в които в крайна сметка поставяте new [] {}
в средата на израз. Това е достатъчно лесно да се направи, като се използва следният метод:
public static IEnumerable<TSource> WrapAsEnumerable<TSource>(this TSource source)
{
return new[] { source };
}
Проблемът е, че това ще бъде приложено към всички и всички типове (което е очакваното поведение), но това също ще има страничен ефект от предоставянето на метода на IEnumerable <T>
екземпляри. В случай, че разрешеният разширен тип е IEnumerable<T>
, бих искал просто да върна този IEnumerable, тъй като алтернативата се намира с IEnumerable<IEnumerable<T>>
, което всъщност не е това, което бихте очаквали при извикване на метода.
Инстинктивно (и може би сънливо) първо създадох претоварване, което изглеждаше така
public static IEnumerable<TSource> WrapAsEnumerable<TSource>(this IEnumerable<TSource> source)
{
return source;
}
за да се справи със случая, когато типът за обвиване е IEnumerable<T>
, но разбира се, контролният поток винаги се разрешава на първия метод.
И така, въпросът е: как мога да създам такъв метод за обвиване, който обработва както случая, когато екземплярът на разширения параметър е IEnumerable<T>
, така и когато не е?
IEnumerable
? - person Dustin Kingen   schedule 03.06.2015