![](/img/trans.png)
[英]'System.IndexOutOfRangeException' Cannot find column 12
[英]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.