2014-11-18 2 views
0

그래서 입력 된 코드가 productcode와 일치 할 때 배열을 지우도록 단추를 코딩하려고합니다. 내가 잘못을Array.clear()를 사용하려고했지만 프로그램을 실행할 때 Index가 배열의 경계를 벗어났습니다.

 string code; 
     code = txtcode.Text; 

     for (int i = 0; i < compartmentno.Length; i++) 
     { 
      if (productcode[i] == code) 
      { 
       Array.Clear(compartmentno, i, compartmentno.Length); 
       Array.Clear(productcode, i, productcode.Length); 
       Array.Clear(name, i, name.Length); 
       Array.Clear(weight, i, weight.Length); 
       Array.Clear(address, i, address.Length); 
       Array.Clear(status, i, status.Length); 
      } 

어떤 생각을하고있는 중이 야 그러나이 오류 저는 여기에 사용되는 코드가 있어요 .. 내가 프로그램을 실행하려고하면 터지는 유지 (인덱스 배열의 범위를 벗어난)? 도움에 미리 감사드립니다!

+0

당신이 배열의 전체 나머지는 삭제된다 iteration i + 1을위한 좋은 징조가 아닙니다. – Plutonix

답변

3

세 번째 매개 변수는 지울 요소 수를 나타내므로 전체 배열의 크기를 전달합니다.

Array.Clear(compartmentno, i, 1) 만 있으면 으로 표시됩니다.에는 삭제할 요소가 하나 있습니다. 이 코드가하는 일에 대해 더 설명 할 수 있다면 도움이 될 것입니다.

또한, 대신 여섯 개 연관 배열을 사용하여 정보를 저장하는 클래스를 만드는 것이 좋습니다 :

class ProductInfo 
{ 
    public string CopmartmentNo { get; set; } 
    public string ProductCode { get; set; } 
    public string Name { get; set; } 
    public decimal Weight { get; set; } 
    public string Address { get; set; } 
    public int Status { get; set; } 
} 
0

Array.Clear 시도는 길이에 대해 하나 개의 인덱스에서 배열을 취소 할 수 있습니다. 0부터 시작하면 문제가 없습니다. 그러나 1에서 시작하면 배열의 끝을지나갑니다.

0

이터레이터 i을 다른 배열과 크기가 같지 않은 compartmentno 배열의 크기와 비교하면됩니다. 지우기 전에 확인하려면 if 문을 사용하십시오.

if(i < ___.Length) Array.Clear(___, i, ___.Length); 

또한 Array.Clear 방법은 첫 번째 파라미터가 시작 인덱스임을 주장하고, 두 번째 요소의 그 수는 없다 종료 인덱스를 toclear이다. 따라서 i0보다 큰 경우이 코드는 실패합니다. 값을 트림 대신 ___.Length - i를 사용하여 아웃 오브 bounds-

if(i < ___.Length) Array.Clear(___, i, ___.Length - i); 

따라서 그 방지 : 당신이 경기가있을 때

for (int i = 0; i < compartmentno.Length; i++) 
     { 
      if (productcode[i] == code) 
      { 
       if(i < compartmentno.Length) Array.Clear(compartmentno, i, compartmentno.Length - i); 
       if(i < productcode.Length) Array.Clear(productcode, i, productcode.Length - i); 
       if(i < name.Length) Array.Clear(name, i, name.Length - i); 
       if(i < wight.Length) Array.Clear(weight, i, weight.Length - i); 
       if(i < address.Length) Array.Clear(address, i, address.Length - i); 
       if(i < status.Length) Array.Clear(status, i, status.Length - i); 
      } 
관련 문제