リストに対して Linq クエリを実行すると、このエラーがスローされます。
Unity3D 3.0 を C# で使用しています (Unity3D は Mono 2.6 を使用しています)。私の知る限り、Unity3D はシングルスレッドです。ベースクラスを継承する「スクリプト」(c# .cs ファイル) を「GameObject」にアタッチすることで機能します。また、Unity はスクリプトのインスタンス化とシリアル化を制御するため、コンストラクターは使用できません。
RoadNodes と RoadCurves への参照を保持する RoadNetwork スクリプトがあります。どちらもシングルトンを介して 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() メソッドで直接呼び出すと、同じエラーが発生します。
そうです、この Exception はスローされ、その tempList.Single() 行を示します。理由は何でしょうか?