2012-10-25 4 views
3

C#을 사용하고 있으며 "importControlKeys"라는 ArrayList를 만들어 잘 만듭니다. 그러나, 나는 arrayList를 통해 반복하고 나중에 코드에서 사용하기 위해 ArrayList의 값을 선택하는 방법을 이해할 수 없습니다.arrayList에서 값을 가져 오는 중

나는 쉽게 뭔가를 놓치고 있지만, ArrayList에서 값을 추출하는 구문은 무엇인지 알고 있습니다. 아래 코드에서 importControlKeys [ii] .value와 같은 somethign을 기대했지만 작동하지 않습니다.

나는이 보드를 검색 했으므로 정확한 솔루션을 찾을 수는 없지만 쉬운 방법이라고 생각합니다. 솔루션의 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 
      } 

     } 
+1

코드에 어떤 오류가 있습니까? –

+0

다른 사람의 코드를 편집하고 다시 쓰지 않기 때문에 나는 arrylist를 사용하고 있습니다. List, T를 사용한다고 가정합니다. 수많은 제안을 기반으로하지만 그게 뭔지 전혀 모르겠다. 그리고 다시 작성할 때이 코드의 일부를 사용할 수 없다. –

+0

코드를 컴파일/실행하면 어떻게됩니까? –

답변

6

당신이 ArrayList에를 사용하지만, 당신이 그것을 통해 루프를 필요로하는 경우 요소가 형식으로 변환하지 않은 경우 당신이이

같은 일을 할 수있는 이유는 확실하지, 당신은 InvalidCastException이를 얻을 수 있습니다. 귀하의 경우 boxed int를 문자열로 캐스트 할 수 없으므로 예외가 throw됩니다.

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

아니면 그냥 드롭 루프

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

아하 거기. 이것은 나를 결국 내 길로 가게합니다. 더 많은 변환 작업을 수행하려면 좀 더 많은 작업을해야 할 것입니다. (일부 기괴한 이유로 lsit에 입력 된 내용은 정수이지만 나중에 문자열로 전달합니다.) 고마워. –

1

아니라 목록으로 다시 작성하지 않고 배열 목록 중 데이터를 얻을 수있는 방법이 믿어야 대신 할 수있는 일

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

} 

당신은 당신이

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

또는

필요 어떤 형태로 (string)를 대체 할 수있다
1

당신은 당신의 문자열 목록에 .value를 호출 할 수 없습니다 ...

그래서이 :

string importKey = importKeyList[ii].value; 

은 다음과 같아야합니다

string importKey = importKeyList[ii]; 
2

당신은 정말 ArrayList에서 사용하지 말아야 처음에는 선택의 여지가 있다면 List<T>을 사용해야합니다. ArrayList은 .NET 2.0 이후 효과적으로 사용되지 않습니다. 업데이 트되지 않았거나 갱신되지 않은 레거시 응용 프로그램 이외의 다른 응용 프로그램보다 List을 사용하면 이점이 없습니다. 그 이유는 List을 선호하는 이유는 ArrayList에 데이터를 저장할 때 object으로 저장되기 때문에 object이 나옵니다. 당신은 당신이 그것을 사용할 수 있도록 그것을 실제로 캐스팅해야합니다.

ArrayList에 저장하는 실제 유형을 알지 못하면 어떤 유형의 List인지 알 수 없거나 결과를 전송해야합니다.

for 루프가 아닌 foreach 루프를 사용하면 구문/구조가 더 쉬운 목록/아라 일리 스트의 모든 항목을 탐색 할 수 있습니다.

1

에 대한 수행 .value :

string importKey = (string)importKeyList[ii]; 
에 대한
0

(카운터 = 0 int로, 카운터 ++; 카운터 < Key.Count를)

{

개체 obj = 키 [카운터];
}

+0

세부 정보 .... –

관련 문제