我正在使用Unity。我使用IEnumerable.Select()來獲取類型列表,並將它們(作爲組件)添加到GameObject中。 運行此:C#LINQ Select()調用函數兩次
var newObjects = types.Select(t => (IGameManager)gameObject.AddComponent(t));
實際上增加了相同類型的組分與遊戲對象在問題的,雖然只newObjects包含於一個的引用。另一個創建的組件只是浮動,而不返回引用。 運行此:
foreach(var t in types)
{
newObjects.Add((IGameManager)gameObject.AddComponent(t));
}
Works和只會增加每種組件類型的遊戲對象中的一個。但是,它看起來有點醜。 (IGameManager是一個接口,所有類型的問題實現。)
我可以只使用foreach循環,但這不完全雄辯,此外,我找不到任何文章在線解釋此行爲,因此我的好奇心越來越好了。
所以,我的問題是:爲什麼Select()每次輸入調用指定的函數兩次,但只返回結果數據的一個副本?我如何解決/防止/補償這種行爲?
謝謝!
types.Select(T =>(IGameManager)gameObject.AddComponent(t))的ToList() – loneshark99
'Select()'不會調用提供的委託。它只構造延遲執行的'IEnumerable'對象。每次枚舉結果的IEnumerable對象時都會調用委託。 – PetSerAl