Teniendo en cuenta lo que otros han dicho acerca de no ser realmente capaz de "agregar" a un enumerable, todavía puede simular la adición. De hecho, argumentaría que puedes "agregar" un elemento a una secuencia transformando la secuencia en una nueva secuencia que de hecho "contiene" el elemento (¡simplemente itera sobre la nueva secuencia si no me crees!) .
También puede expresar un solo elemento como algo numerable así:
//ToEnumerable might not be the best name here
public static IEnumerable<T> ToEnumerable<T>(this T item)
{
return Enumerable.Repeat(item,1);
}
o
public static IEnumerable<T> ToEnumerable<T>(this T item)
{
yield return item;
}
Entonces puede "añadir" un elemento a una enumerable como esto:
var items = GetSomeItems();
var itemsWithNewItemOnEnd = items.Concat(somenewitem.ToEnumerable());
var itemsWithNewItemAtStart = somenewitem.ToEnumerable().Concat(items);
Incluso puede insertar el elemento en alguna otra ubicación en la secuencia de esta manera (suponiendo que sepa la posición después de la cual desea insertarlo):
var itemsWithNewItemInserted = items.Take(5).Concat(somenewitem.ToEnumerable()).Concat(items.Skip(5));
Después de finalizar su operación (es decir, usted ha manipulado la secuencia de modo que "contiene" lo que desea que contenga), es probable que desee hacer una matriz o lista de la secuencia a través de los métodos toArray o ToList:
var itemsWithNewItemInserted = items.Take(5).Concat(somenewitem.ToEnumerable()).Concat(items.Skip(5)).ToList();
Ahora itemsWithNewItemInserted es una lista que contiene todos los elementos deseados de la lista original, con los nuevos elementos insertados en el medio.
Jugar con secuencias demasiado parecidas (tomar, saltar, insertar, etc.) puede costarle tiempo porque cada método de extensión agregado (Take, Skip, etc.) puede hacer que la secuencia se itere varias veces, pero el la sintaxis de comprensión de lista facilita la expresión de operaciones que parecen ser un poco más intrincadas mediante la iteración convencional.
nuevo, aquí hay algunos enlaces que hablan de expresar artículos individuales como IEnumerable:
Passing a single item as IEnumerable<T>
Is there a neater linq way to 'Union' a single item?
posible duplicado de [? ¿Cómo puedo agregar un elemento a una colección IEnumerable] (http : //stackoverflow.com/questions/1210295/how-can-i-add-an-item-to-a-ienumerablet-collection) –
nawfal