3

我正在使用 C#,我正在创建一个名为“importControlKeys”的 ArrayList,它创建得很好。但是,我终其一生都无法找到一种循环遍历 arrayList 并挑选出 ArrayList 中的值以供以后代码使用的方法。

我知道我遗漏了一些简单的东西,但是从 ArrayList 中提取值的语法是什么。我希望它在下面的代码中类似于 importControlKeys[ii].value ,但这不起作用。

我已经在这些板上进行了搜索,但找不到确切的解决方案,尽管我确信这很容易。msot 的解决方案说要重写为 List,但我必须相信有一种方法可以从数组列表中获取数据而无需重写为 List

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 转换为导致引发异常的字符串。

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首先使用 a ,如果你有选择,你应该使用 a List<T>ArrayList自 .NET 2.0 以来已被有效弃用。List除了不能或尚未更新的遗留应用程序之外,使用它没有任何优势。首选的原因List是,当您将数据存储在 an 中时,ArrayList它只是存储为 an object,因此 anobject就是您得到的。您需要将其转换为真正的样子,以便您可以使用它。

在不知道您存储在其中的实际类型的情况下,ArrayList我无法告诉您List它应该是什么类型,或者您需要将结果转换成什么。

另请注意,您可以使用foreach循环而不是for循环来遍历列表/数组列表中的所有项目,这通常在语法上更容易。

于 2012-10-25T16:02:08.733 回答
1

你不能调用.value你的字符串列表......

所以这:

string importKey = importKeyList[ii].value;

应该:

string importKey = importKeyList[ii];
于 2012-10-25T16:01:50.263 回答
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 = (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 回答