簡體   English   中英

清單 <T> 查找拋出System.IndexOutOfRangeException

[英]List<T>.Find throwing System.IndexOutOfRangeException

我在List.Find()上得到了System.IndexOutOfRangeException。 問題在於它不一致,並且僅在生產環境中發生。 遍歷MSDN文檔中的List.Find(Predicate match)方法 ,但是它確實提到了索引超出范圍異常。 在哪種情況下,將從List.Find()方法引發System.IndexOutOfRangeException?

這是在ASP.Net應用程序中發生的。 代碼在靜態方法中,如下所示:

private static T GetReflectionInfo<T>(object obj, string memberName) where T :    System.Reflection.MemberInfo
{
    var knownInfos = new List<MemberInfo>();
    /// populate the list
    /// this line is where the exception is thrown. T is the generic type passed in.
    T info = (T) knownInfos.Find(item => item is T && item.Name.EqualsIgnoreCase(memberName));
}

[更新]-事實證明,其中一個節點出了點問題。 感謝您的回答和評論。

如果在運行查找時從另一個線程修改List (特別是刪除項目),則可能引發該錯誤。 根據文檔 ,這是不允許的(強調我的):

線程安全

此類型的公共靜態(在Visual Basic中為Shared)成員是線程安全的。 不保證任何實例成員都是線程安全的。

只要不修改集合 ,List(Of T)即可同時支持多個閱讀器。 通過集合進行枚舉本質上不是線程安全的過程。 在極少數情況下,枚舉與一個或多個寫訪問競爭,確保線程安全的唯一方法是在整個枚舉期間鎖定集合。 要允許多個線程訪問該集合以進行讀寫,您必須實現自己的同步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM