2012-07-28 89 views
1

自從我把我的項目從7.0轉換到7.1之後,我一直在收到非常奇怪的錯誤。例如:超出範圍的異常,但索引在範圍內! WP 7.1

List<bool> locks = new List<bool>(11); 
locks[0] = true; 

它拋出一個參數超出範圍例外的第二行,但是當我把我的鼠標上的鎖就說明它有11個元素所有這一切都被初始化爲false。

+0

不要使用wp7開發太多,但除非它使用比完整版本的.NET稍微不同的List 版本,否則您會遇到超範圍異常,因爲構造函數過載列表(Int32)不會添加許多元素。它只是將類內的backing數組初始化爲11個元素。所以你打電話索引0還不存在 – psubsee2003 2012-07-28 19:18:26

+0

我以爲我在其他地方使用了相同的代碼,它的工作,但回頭看我以前使用添加。 你說得對。我想我很困惑,因爲它顯示列表中有11個布爾值對象,而不是11個空值。 – jolyrojr 2012-07-28 19:39:39

+0

是的,我只是在Silverlight框架中查找List ,行爲與.NET 4.0相同。我會讓我的評論成爲答案 – psubsee2003 2012-07-28 19:41:32

回答

4

我剛剛在Silverlight框架中查找了List<T>的MSDN條目。如果您發佈的代碼是您的確切代碼,您將獲得ArgumentOutOfRangeException,因爲索引不存在。

你的構造List<bool> locks = new List<bool>(11);創造與0元素的新名單,但11

當你調用locks[0] = true;,您試圖訪問不被被添加到一個元素的初始容量,所以異常被拋出。

根據你的評論,它看起來像你在列表中看到11布爾的。除非你在兩行之間有更多的代碼,否則這是不可能的。

使用調試器,如果您深入挖掘對象,您將看到List<bool>的支持數組,其中將有11個元素。但List本身沒有任何元素。您可以通過致電List.Count

來輕鬆驗證此功能,並且您永遠不會在任何地方看到null爲bool值。 bool是一個默認值爲false的值類型,這就是爲什麼支持數組顯示11個元素都是false的原因。