从arrayList中获取值

时间:2012-10-25 15:56:59

标签: c# arraylist

我正在使用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  
            }

        }

7 个答案:

答案 0 :(得分: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...
}

答案 1 :(得分:2)

你真的不应该首先使用ArrayList,如果你有选择,你应该使用List<T>。自.NET 2.0以来,ArrayList已被有效弃用。使用List除了无法更新或未更新的遗留应用程序之外没有任何优势。首选List的原因是,当您在ArrayList中存储数据时,它只是存储为object,因此您可以获得object。你需要把它投射到真正的东西上才能使用它。

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

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

答案 2 :(得分:1)

嗯,你可以做的是

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

}

您可以用您需要的任何类型替换(string)

答案 3 :(得分:1)

foreach (object o in importKeyList)
{ 
    // Something...
}

for (int i = 0; i < importKeyList.Count; i++)
{
    object o = importKeyList[i];
    // Something...
}

答案 4 :(得分:1)

您无法在字符串列表中调用.value ...

所以这个:

string importKey = importKeyList[ii].value;

应该是:

string importKey = importKeyList[ii];

答案 5 :(得分:1)

只需删除.value

即可
string importKey = (string)importKeyList[ii];

答案 6 :(得分:0)

  

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

     

{

     

object obj = Key [Counter];
  }