Pasa un solo elemento como IEnumerable
¿Hay una forma común de pasar un solo elemento de tipo T
a un método que espera un parámetro IEnumerable<T>
? El lenguaje es C#, framework versión 2.0.
Actualmente estoy usando un método helper (es. Net 2.0, así que tengo un montón de métodos helper de casting/projecting similares a LINQ), pero esto parece tonto:
public static class IEnumerableExt
{
// usage: IEnumerableExt.FromSingleItem(someObject);
public static IEnumerable<T> FromSingleItem<T>(T item)
{
yield return item;
}
}
Otra forma sería, por supuesto, crear y rellenar un List<T>
o un Array
y pasarlo en lugar de IEnumerable<T>
.
[Editar] Como método de extensión podría ser nombrado:
public static class IEnumerableExt
{
// usage: someObject.SingleItemAsEnumerable();
public static IEnumerable<T> SingleItemAsEnumerable<T>(this T item)
{
yield return item;
}
}
¿Me estoy perdiendo algo aquí?
[Edit2] Encontramos que someObject.Yield()
(como @Peter sugirió en los comentarios a continuación) es el mejor nombre para este método de extensión, principalmente por brevedad, así que aquí está junto con el comentario XML si alguien quiere tomarlo:
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;
}
}
Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32
Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52