3

私はC#を使用しており、「importControlKeys」という名前のArrayListを作成しています。ただし、一生の間、arrayListをループして、後のコードで使用するためにArrayListの値を選択する方法を見つけることはできません。

簡単なものが欠けていることはわかっていますが、ArrayListから値を抽出するための構文は何ですか。以下のコードのimportControlKeys[ii].valueのようなものだと思っていましたが、機能していません。

私はこれらのボードを検索しましたが、正確な解決策を見つけることができませんが、それは簡単だと確信しています。ソリューションのmsotはリストとして書き直すと言っていますが、リストとして書き直すことなく配列リストからデータを取得する方法があると信じなければなりません。

private void button1_Click(object sender, EventArgs e)
        {
            ArrayList importKeyList = new ArrayList();
            List<DataGridViewRow> rows_with_checked_column = new List<DataGridViewRow>();
            foreach (DataGridViewRow row in grd1.Rows) 
            { 
                if (Convert.ToBoolean(row.Cells[Del2.Name].Value) == true)
                { 
                    rows_with_checked_column.Add(row);
                    importKeyList.Add(row.Cells[colImportControlKey.Name].Value);

                    //string importKey = grd1.Rows[grd1.SelectedCells[0].RowIndex].Cells[0].Value.ToString();
                    //grd1.ClearSelection();
                    //if (DeleteImport(importKey))
                    //    LoadGrid();
                }                
            }
            for (int ii = 0; ii < rows_with_checked_column.Count; ii++)
            {
                //grd1.ClearSelection();
                string importKey = importKeyList[ii].value;  //ERRORS OUT

                if (DeleteImport(importKey))
                    LoadGrid();

                // Do what you want with the check rows  
            }

        }
4

7 に答える 7

6

ArrayListを使用している理由はわかりませんが、ループする必要がある場合は、次のようにすることができます。

要素がタイプに変換できない場合は、InvalidCastExceptionが発生します。あなたの場合、boxed intをstringにキャストして、例外をスローすることはできません。

foreach (object obj in importKeyList ) 
{
    string s = (string)obj;
    // loop body
}

または、forループを実行します

for (int intCounter = 0; intCounter < importKeyList.Count; intCounter++)
{
    object obj = importKeyList[intCounter];
    // Something...
}
于 2012-10-25T16:02:17.317 に答える
2

そもそもを使用するべきではありません。ArrayList選択肢がある場合は、を使用する必要がありますList<T>ArrayList.NET2.0以降は事実上非推奨になっています。List更新できない、または更新されていないレガシーアプリケーション以外に使用する利点はありません。その理由Listは、データをに格納すると、データはArrayListとして格納されるだけなobjectので、出力されるobjectものであるためです。使用できるように、実際の状態にキャストする必要があります。

格納している実際のタイプがわからArrayListないと、どのタイプにListする必要があるのか​​、結果を何にキャストする必要があるのか​​がわかりませんでした。

foreachまた、ループではなくループを使用forして、リスト/配列リスト内のすべての項目を調べることができることにも注意してください。これは、多くの場合、構文的に簡単です。

于 2012-10-25T16:02:08.733 に答える
1

代わりにできることは

foreach(object o in importKeyList)
{ 
    string importKey = (string)o;
    // ...

}

(string)を必要なタイプに置き換えることができます

于 2012-10-25T16:00:25.663 に答える
1
foreach (object o in importKeyList)
{ 
    // Something...
}

また

for (int i = 0; i < importKeyList.Count; i++)
{
    object o = importKeyList[i];
    // Something...
}
于 2012-10-25T16:00:33.897 に答える
1

.value文字列リストを呼び出すことはできません...

したがって、この:

string importKey = importKeyList[ii].value;

する必要があります:

string importKey = importKeyList[ii];
于 2012-10-25T16:01:50.263 に答える
1

:をドロップするだけ.valueです

string importKey = (string)importKeyList[ii];
于 2012-10-25T16:03:52.243 に答える
0

for(int Counter = 0; Counter <Key.Count; Counter ++)

{{

オブジェクトobj=Key [Counter];
}

于 2013-09-11T09:33:01.993 に答える