Эта ошибка выдается при выполнении запроса Linq над списком.
Я использую Unity3D 3.0 с C # (Unity3D использует Mono 2.6). Unity3D, насколько я знаю, однопоточный. Он работает, присоединяя «сценарии» (файлы c # .cs), которые наследуют базовый класс, к «GameObject». Кроме того, Unity контролирует создание и сериализацию сценариев, поэтому вы не можете использовать конструкторы.
У меня есть сценарий RoadNetwork, который содержит ссылку на RoadNodes и RoadCurves, оба из которых обнаруживают RoadNetwork через одиночный код и регистрируют / отменяют регистрацию. Я поместил «мини-фабрики» в RoadNode и RoadCurve, которые выполняют тяжелую работу по подключению к игровому объекту.
RoadNode сначала проверяет RoadNetwork, чтобы убедиться, что в той же позиции уже нет узла, выполнив следующее:
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;
}
Где соответствующий метод в RoadNetwork:
public RoadNode2 GetNodeAtPosition(Vector3 position)
{
var tempList = new List<RoadNode2>();
return tempList.Single(x => x.Position == position);
}
tempList был попыткой сузить проблему, но я получаю точно такую же ошибку. Это должно быть "Nodes.Single (...", но я сомневаюсь, что это важно. Я получаю ту же ошибку, если вызываю запрос Linq непосредственно в методе New ().
Так что да, это исключение выдает и указывает мне на эту строку tempList.Single (). В чем причина?