Есть ли общий способ передать один элемент типа T
методу, который ожидает параметр IEnumerable<T>
? Язык - это С#, версия 2.0.
В настоящее время я использую вспомогательный метод (это .Net 2.0, поэтому у меня есть целая куча методов каста/проецирования вспомогательных методов, подобных LINQ), но это просто кажется глупым:
public static class IEnumerableExt
{
// usage: IEnumerableExt.FromSingleItem(someObject);
public static IEnumerable<T> FromSingleItem<T>(T item)
{
yield return item;
}
}
Другим способом, конечно же, будет создание и заполнение List<T>
или Array
и передача его вместо IEnumerable<T>
.
[Изменить]. В качестве метода расширения его можно назвать:
public static class IEnumerableExt
{
// usage: someObject.SingleItemAsEnumerable();
public static IEnumerable<T> SingleItemAsEnumerable<T>(this T item)
{
yield return item;
}
}
Я что-то пропустил?
[Edit2] Мы нашли someObject.Yield()
(как @Peter, предложенный в комментариях ниже), чтобы быть лучшим именем для этого метода расширения, в основном для краткости, поэтому здесь он вместе с XML комментарий, если кто-то хочет его захватить:
public static class IEnumerableExt
{
/// <summary>
/// Wraps this object instance into an IEnumerable<T>
/// consisting of a single item.
/// </summary>
/// <typeparam name="T"> Type of the object. </typeparam>
/// <param name="item"> The instance that will be wrapped. </param>
/// <returns> An IEnumerable<T> consisting of a single item. </returns>
public static IEnumerable<T> Yield<T>(this T item)
{
yield return item;
}
}