2

以下を含むsplitMeToDeleteという名前の文字列から要素を取得するgatherSplitという名前の配列リストが1つあります。

splitMeToDelete = "Salary, Personal Savings, Pensions, Annuities, Social Security"

文字列は次のようにArrayListに分割されます。

ArrayList gatherSplit = new ArrayList(splitMeToDelete.Split(new char[] { ',' }));

次のコード行を指定すると、IndexOfが3 instadとして取得され、エラーが発生します。

gatherSplit.RemoveAt(gatherSplit.IndexOf("Annuities")); 

私が得るエラーは次のとおりです:

インデックスが範囲外でした。負ではなく、コレクションのサイズよりも小さい必要があります。

なぜこれが起こっているのか分かりません。

4

4 に答える 4

8

IndexOf配列内のアイテムに「年金」(先頭のスペース)が含まれているため、への呼び出しは-1を返します。Trimスペースを削除するには、各アイテムを試してください。

ArrayList gatherSplit = new ArrayList(
    splitMeToDelete.Split(new char[] { ',' }).Select(item => item.Trim()).ToArray()
);

(または、もっと簡単に、分割するだけ", ".ToCharArray()です。)

于 2012-09-01T08:02:09.300 に答える
5

dbaseman が指摘したことに加えて、これに使用できますRemove

gatherSplit.Remove(" Annuities"); //Note the space if you don't do the trim that dbaseman suggests.

また、問題の原因となっているコードの行にブレークポイントを設定し、「gatherSplit」にカーソルを合わせて値を確認し、プラスを押してオブジェクト内を調べると、余分なスペースが表示されます。

画像の赤丸のところをクリックするのがブレークポイントの設定方法です。

問題を確認するためのデバッグ

于 2012-09-01T08:03:51.093 に答える
0

この下の行を使用します。スペースで区切られています。スナップ ショットでは表示されませんが、[テキスト ビジュアライザー] をクリックして確認してください。スペースが含まれています。

ArrayList gatherSplit = new ArrayList(splitMeToDelete.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries));
于 2012-09-01T10:16:12.310 に答える
0

各項目間のスペースを確認してください

ここに画像の説明を入力

上記の文字列の代わりに、

string splitMeToDelete = "Salary,Personal Savings,Pensions,Annuities,Social Security";
于 2012-09-01T09:45:26.133 に答える