Saltar al contenido

¿Cómo puedo agregar un elemento a un IEnumerable ¿recopilación?

Intenta entender el código correctamente previamente a utilizarlo a tu trabajo y si ttienes algo que aportar puedes dejarlo en la sección de comentarios.

Solución:

No puedes, porque IEnumerable no representa necesariamente una colección a la que se pueden añadir artículos. De hecho, ¡no representa necesariamente una colección en absoluto! Por ejemplo:

IEnumerable ReadLines()

     string s;
     do
     
          s = Console.ReadLine();
          yield return s;
      while (!string.IsNullOrEmpty(s));


IEnumerable lines = ReadLines();
lines.Add("foo") // so what is this supposed to do??

Sin embargo, lo que puede hacer es crear un nuevoIEnumerable objeto (de tipo no especificado), que, cuando se enumera, proporcionará todos los elementos del anterior, además de algunos propios. Tu usas Enumerable.Concat para eso:

 items = items.Concat(new[]  "foo" );

Este no cambiará el array objeto (de todos modos, no puede insertar elementos en matrices). Pero creará un nuevo objeto que enumerará todos los elementos en el array, y luego “Foo”. Además, ese nuevo objeto hacer un seguimiento de los cambios en el array (es decir, siempre que lo enumere, verá los valores actuales de los elementos).

El tipo IEnumerable no admite este tipo de operaciones. El propósito de IEnumerable interfaz es permitir que un consumidor vea el contenido de una colección. No modificar los valores.

Cuando realiza operaciones como .ToList().Add() está creando una nueva List y agregando un valor a esa lista. No tiene conexión con la lista original.

Lo que puede hacer es usar el método Agregar extensión para crear una nueva IEnumerable con el valor agregado.

items = items.Add("msg2");

Incluso en este caso no modificará el original. IEnumerable objeto. Esto se puede verificar manteniendo una referencia a él. Por ejemplo

var items = new string[]"foo";
var temp = items;
items = items.Add("bar");

Después de este conjunto de operaciones, la variable temp solo hará referencia a un enumerable con un solo elemento “foo” en el conjunto de valores, mientras que los elementos harán referencia a un enumerable diferente con valores “foo” y “bar”.

EDITAR

Constantemente olvido que Add no es un método de extensión típico en IEnumerable porque es una de las primeras que termino definiendo. Aquí está

public static IEnumerable Add(this IEnumerable e, T value) 
  foreach ( var cur in e) 
    yield return cur;
  
  yield return value;

¿Has considerado usar ICollection o IList interfaces en cambio, existen por la misma razón que desea tener un Add método en un IEnumerable.

IEnumerable se usa para ‘marcar’ un tipo como … bueno, enumerable o simplemente una secuencia de elementos sin necesariamente garantizar si el objeto subyacente real admite la adición/eliminación de elementos. Recuerde también que estas interfaces implementan IEnumerable para que obtenga todos los métodos de extensión que obtiene con IEnumerable así como.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *