c# - objetos - Cómo agregar un rango de elementos a la variable IList
agregar elementos a una lista c# (5)
Podrías hacer algo como esto:
IList<string> oIList1 = new List<string>{"1","2","3"};
IList<string> oIList2 = new List<string>{"4","5","6"};
IList<string> oIList3 = oIList1.Concat(oIList2).ToList();
Entonces, básicamente, usarías la extensión concat y ToList () para obtener una funcionalidad similar a AddRange ().
no hay AddRange()
método AddRange()
para IList<T>
.
¿Cómo puedo agregar una lista de elementos a un IList<T>
sin iterar a través de los elementos y usar el método Add()
?
Si miras el código fuente de c # para List , creo que List.AddRange () tiene optimizaciones que un simple bucle no aborda. Por lo tanto, un método de extensión debería simplemente verificar si el IList es una Lista, y si es así, usar su AddRange () nativo.
Hurgando en el código fuente, verá que la gente de .NET hace cosas similares en sus propias extensiones de Linq para cosas como .ToList () (si es una lista, cámbiela ... de lo contrario, créela).
public static class IListExtension
{
public static void AddRange<T>(this IList<T> list, IEnumerable<T> items)
{
if (list == null) throw new ArgumentNullException("list");
if (items == null) throw new ArgumentNullException("items");
if (list is List<T>)
{
((List<T>)list).AddRange(items);
}
else
{
foreach (var item in items)
{
list.Add(item);
}
}
}
}
También puedes escribir un método de extensión como este:
internal static class EnumerableHelpers
{
public static void AddRange<T>(this IList<T> collection, IEnumerable<T> items)
{
foreach (var item in items)
{
collection.Add(item);
}
}
}
Uso:
IList<int> collection = new int[10]; //Or any other IList
var items = new[] {1, 4, 5, 6, 7};
collection.AddRange(items);
Lo cual todavía está iterando sobre los elementos, pero no tiene que escribir la iteración o conversión cada vez que lo llame.
AddRange
se define en la List<T>
, no en la interfaz.
Puede declarar la variable como List<T>
lugar de IList<T>
o convertirla en List<T>
para obtener acceso a AddRange
.
((List<myType>)myIList).AddRange(anotherList);
var var1 = output.listDepartment1
var var2 = output.listDepartment2
var1.AddRange(var2);
var list = var1;