2016-06-14 35 views
-3

getProxy()にエラーが発生しましたが、エラーはインデックス外にあります。インデックスが範囲外です

エラー:

An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll 
Additional information: 
Index was out of range. Must be non-negative and less than the size of the collection. 

はコード:

static List<String> proxies = new List<String>(); 


private static String getProxy() 
{ 
    lock (proxies) 
    { 
     return proxies[new Random().Next(0, proxies.Count)]; 
    } 
} 

それは空ではありませんが、内部プロキシを持っている、エラーが私のロード機能ではないが、それはここにあります。

私はブレークポイントを追加し、それをデバッグし、プロキシはカウント= 3とproxies.countの値は3

+3

これは大量のコードですが、その中には関連性がないものもあります。問題の一部ではない可能性のあるビットを切り捨てることができますか?使用/輸入が心に浮かびます。 – GillesDV

+1

このような例外が発生するたびに、例外の場所でデバッガのBreakを放置して見てみましょう。この特定の例外は、リスト/配列の境界外にインデックスを作成する可能性があります。 – GEEF

+0

@GillesDV問題ありません、申し訳ありません。私はすでにそれをしてきました。 – sum1hor

答えて

0

@Gendolkariからの回答の価値を持っていています

If proxies contains no elements at all, then it would be trying to access the first element of an empty list and throw this exception.

return proxies[new Random().Next(0, proxies.Count)]; 

==>

return proxies[new Random().Next(0, 0)]; 

==>

return proxies[0]; 

プロキシが空であるため、List(T).Itemのドキュメントに記載されているように、ArgumentOutOfRangeExceptionが発生します。

+0

追加情報:索引が範囲外です。負でなく、コレクションのサイズより小さくなければなりません。 – sum1hor

+0

私はブレークポイントを追加してデバッグしました。プロキシはCount = 3の値を持ち、proxies.countは3の値を持っています。 – sum1hor

+0

okですが、このコードは空のリストでクラッシュするため、とにかくそれを変更する必要があります。ロックの使用に関するアドバイスも参照してください。https://msdn.microsoft.com/en-gb/library/c5kehkcz.aspx – buffjape

関連する問題