2014-06-18 5 views
-1

최근 편집자 개발에 관한 프로젝트를 수행하고 있습니다. C# 목록에서 ADD 기능을 사용하는 것을 허용 할 수 있지만 인덱싱을 통해 값을 지정할 수 없습니다. 아무도 도와 줄 수 있습니까?C# 인덱스가 범위를 벗어났습니다. 음수가 아니어야하고 컬렉션의 크기보다 작아야합니다.

+0

색인으로 요소를 처음 참조 할 때 목록에 데이터가 포함되어 있습니까? – IrishGeek82

+1

'line.Substring (26, EndOfIndex)'를 단지'line.Substring (26)'으로 대체 할 수 있습니다. 기본적으로 나머지 문자열을 반환합니다 – cost

+0

입력에 액세스 할 수 없으므로 일부 중단 점을 설정하고 코드를 단계별로 실행 해보십시오. 문제가 명확하지 않으면 예외를 던지는 행과 그 시점의 다양한 변수의 값을 알려주십시오. –

답변

2
List<List<String>> datalist = new List<List<String>>(); 
.... 
datalist[tag.Count-1]=datasublist; 

존재하지 않는 것을 지정하려고하기 때문에 문제가됩니다. 목록은 배열과 같지 않습니다. 배열에서 특정 크기로 선언하고 사용자가 작성한 부분을 사용할 수 있습니다. datalist을 아무 것도 포함하지 않은 새 목록으로 선언 했으므로 바꿀 수있는 내용이 없습니다. 당신은 기본적으로 나머지를 반환합니다 내가 코멘트에서 언급 한 바와 같이

datalist.Add(datasublist); 

옆으로 관련이없는, 당신은

line.Substring(26) 

으로

line.Substring(26, EndOfIndex) 

대체 할 수 사용해야 문자열의. EndOfIndex 변수를 제거 할 수도 있습니다. 내가 오류가 있으리라 믿고있어

2

라인에 : 당신이 더 나은 아직 어쩌면 Dictionary<string, List<string>>Dictionary<int, List<string>>를 원하거나 같은

datalist[tag.Count-1]=datasublist; 

은 얼핏보기에 그것은 나에게 보였다. 이 경우 값 tag.Count - 1 또는 방금 추가 한 태그 값을 저장할 수 있습니다. 그러나 두 번째 생각에서 위의 줄은 반복되어 반복되고 있으며, 여러분은 상관 목록에 여러 줄을 추가하려고하는 것처럼 보입니다.

class TagInfo 
{ 
    public string TagName {get; set;} 
    private readonly List<string> data = new List<string>(); 
    public List<string> Data {get {return data;}} 
} 

것은 당신이 할 수 있습니다 : 당신은 할 수

List<TagInfo> tags = new List<TagInfo>(); 

while (line != null) 
{ 

    if (line.Substring(0, 26) == "CRDI-CONTROL %%LINES-BEGIN") 
    { 
     string tagName = line.Substring(26); 
     TagInfo tag = new TagInfo {TagName = tagName}; 
     tags.Add(tag); 

     line = reader.ReadLine(); 
     while (line.Substring(0, 24) != "CRDI-CONTROL %%LINES-END") 
     { 
      tag.Data.Add(line.Replace(" ", String.Empty)); 

      line = reader.ReadLine(); 
     } 
    } 


그래서, 나는 태그 이름과 함께 관련 데이터를 저장하는 클래스를 사용하는 것이 좋습니다 나중에 고급 이름으로 태그를 검색해야하는 경우에는 Dictionary<string, TagInfo>을 사용하십시오. 태그 이름을 키로 저장하십시오. 원하는 경우 태그 이름을 사용하는 생성자를 추가하거나 직접 TagInfoCollection을 생성하여 코드를 정리할 수 있습니다.

+0

이 행은 내 프로그램에서 실행할 수 없습니다. tag.Data.Add (line.Replace ("", String .빈)); – user3750656

관련 문제