La operación no es válida debido al estado actual del objeto - Linq en la lista

Este error se genera al ejecutar una consulta Linq sobre una Lista.

Estoy usando Unity3D 3.0 con C # (Unity3D usa Mono 2.6). Unity3D, que yo sepa, es de un solo subproceso. Funciona adjuntando "scripts" (archivos c # .cs) que heredan una clase base, a un "GameObject". Además, Unity controla la creación de instancias y la serialización de scripts para que no pueda usar constructores.

Tengo un script de RoadNetwork que contiene una referencia a RoadNodes y RoadCurves, los cuales localizan RoadNetwork a través de un singleton y se registran / cancelan. He puesto "mini-fábricas" en RoadNode y RoadCurve que hacen el trabajo duro de conectarse a un objeto de juego.

RoadNode primero verifica con RoadNetwork para asegurarse de que no haya un nodo en esa misma posición, haciendo esto:

public static RoadNode2 New(float x, float y, float z)
{
    //First try to find an existing one
    var rn = RoadNetwork.Instance.GetNodeAtPosition(new Vector3(x, y, z))
             ?? UnityReferenceHelper.GetNewGameObjectFor<RoadNode2>(
                 "RoadNode_" + (RoadNetwork.Instance.Nodes.Count + 1).ToString("D3"),
                 RoadNetwork.Instance.transform.FindChild("Nodes"));

    rn.Position = new Vector3(x, y, z);

    rn.gameObject.active = true;

    return rn;
}

Donde el método apropiado en RoadNetwork es:

public RoadNode2 GetNodeAtPosition(Vector3 position)
{
    var tempList = new List<RoadNode2>();

    return tempList.Single(x => x.Position == position);
}

tempList fue un intento de reducir el problema, pero obtengo exactamente el mismo error. Debería ser "Nodes.Single (...", pero dudo que importe. Me sale el mismo error si llamo a la consulta Linq directamente en el método New ().

Entonces, sí, esta excepción arroja y me señala a esa línea tempList.Single (). ¿Cuál sería la razón?

Respuestas a la pregunta(3)

Su respuesta a la pregunta