我發現一些線程具有類似的標題,但沒有一個似乎有一個合適的答案。 一個人提到.NET版本4.0以前的錯誤 - 我使用4.0,所以這不應該是它。StackOverflowException對嵌套查詢,小項數
考慮下面的例子: 我正在嘗試創建類Part的實例的集合,這些實例不屬於PartGroup的任何實例。
Func<Part,bool> hasGroup = P => partColl.Groups.Any(G => G.Parts.Contains(P));
var groupless = partColl.Parts.Where(P => ! hasGroup(P));
partColl是實現特性的基團和部分,每個IEnumerable<T>
其中T是PartGroup或部分分別作爲List<T>
內部實施的類的實例。 partColl.Parts包含存在的所有零件。 class Group擁有屬性IEnumerable<Part> Parts
,列出對屬於該組的零件的引用。
在我目前的程序中,有27個零件和5個元素沒有重疊。 儘管有複雜的二次曲線,但如果沒有犯規,那應該不會有什麼問題。
當我運行這個時,它會崩潰hasGroup上的所述異常。
我錯過了什麼?
編輯: 一個小細節忘在抽象這裏介紹: IEnumerable的PartGroup.Parts是,不像PartCollection的兩個屬性,而不是一個列表的支持,這是一個自動財產與私人集,在傳入IEenumerable的c'tor中初始化。這個IEnumerable背後的實例也是一個列表,每個組都有一個列表,所以我不確定究竟發生了什麼。
BUT,異常是由消失:也支持該屬性與在構造類型爲List的和的變量,分配給它:_list = parts.ToList(),其中份是IEnumerable<Parts>
,作爲PARAM傳遞到Ctor。我做了ToList只是爲了確保它確實是一個列表,而不是一半的查詢,但它應該,因爲在我正在構建組的地方,每個組的一個新列表在分配之前被分配......
剩下的問題仍然很有趣:發生了什麼事情,爲什麼自動屬性會導致「異常」? 我會根據要求發佈更多細節,但現在需要一段時間。
什麼是導致異常的堆棧跟蹤?它可能會崩潰,因爲hasGroup使用堆棧,但在前面的部分出了問題。 –
所有stacktrace顯示是調用三個不同的匿名方法,與[外部代碼]交織在一個模式中,如: __5(..)[External] __4(..)__6(..)[External] ... repeated ,並在最後說:「超過了Visual Studio支持的最大堆棧幀數。」 看起來對我來說是無盡的,我不明白爲什麼,儘管 – user1847129
你是否覆蓋Equals或GetHashCode? – Johnbot