No es realmente una respuesta, más un comentario de investigación.
Me encontré con el mismo problema e hice una prueba rápida. He intentado con el siguiente código y no pude obtener este código para arrojar el ArgumentException: Destination array was not long enough
. Pero cuando quito la .ToList()
desde la línea de
return allLines.ToList().ToArray();
se bloquea inmediatamente.
Este es el código de demostración e incluso el IDE me dice que debería eliminar la llamada ToList()
ya que parece redundante.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace ConsoleApp1
{
class Program
{
static void Main() {
List<string> thelist = new List<string>();
Thread producer = new Thread(() => {
while (true) {
thelist.Add("a" + DateTime.Now);
}
});
Thread transformer = new Thread(() => {
while (true) {
string[] thearray = thelist.ToList().ToArray();
Console.WriteLine(thearray.Length);
}
});
producer.Start();
transformer.Start();
Console.ReadKey(true);
}
}
}
Me pregunto, ¿por qué no se estrellaría, como la lista también está respaldada por una matriz.
¿De dónde exactamente obtienes la excepción? ¿Puedes actualizar la pregunta con el trazado de la pila de excepción y señalar la línea de código exacta donde se lanza? –
Sí, es el siguiente mensaje (lo siento por el desorden): 'en System.Array.Copy (Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length, Boolean confiable) en System.Array.Copy (Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length) en System.Collections.Generic.List'1.CopyTo (T [] array, Int32 arrayIndex) en System.Collections.Generic.List'1. .ctor (colección IEnumerable'1) en MyGame.Player.get_bikesCopy() ' – Geert
¿Has llegado a la raíz de este problema? Me estoy encontrando con algo similar. –