編集:これが起こっている中途半端な理由のために下部を見てください
私は非常に奇妙なIndexOutOfRangeExceptionを持っています(タイトルで述べたように)。これは、foreachを使用してコントロールのコントロールを反復処理するときに発生します(再帰的なFindControl)。
次に、確認するチェックを追加することを考えましたroot.Controls.Count > 0
。ただし、デバッガーが明確に言っている間、私は例外を受け取り続けますCount == 0
。
問題のルートはFormViewです。単純なプロパティチェックでIndexOutOfRangeExceptionがスローされる理由を誰かが知っている場合は、私に教えてください。
例外stackTrace(はい、完了しています):
at System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
コード:
public static Control FindControlRecursive(this Control root, string id)
{
if (root.ID == id)
{
return root;
}
if (root.Controls.Count > 0)
{
foreach (Control c in root.Controls)
{
Control t = c.FindControlRecursive(id);
if (t != null)
{
return t;
}
}
}
return null;
}
編集:
ネイティブ関数を使用しようとしましたがFindControl
、これは同じエラーをスローします。
具体的な質問:
foreachがネイティブコレクションにIndexOutOfRangeExceptionをスローするにはどうすればよいですか。
EDIT2:
どういうわけか、これはObjectDataSourceの使用に関連しているようです。入力パラメーターを正しく入力していませんでしたが、エラーは発生しませんでした。おそらく、これにより、(そのデータソースを使用していた)FormViewが何らかの形で破損しました。チャイルドコントロールにアクセスする前にエラーがスローされることなく、これがどのように発生するかを知りたいと思っています。