2011-04-07 4 views
0

I XML 파일에서 <Test></Test> 노드의 값에 작용 코드의 다음 섹션이 있습니다상위 값을 모르는 경우 사용하기 전에이 배열을 올바르게 초기화하는 방법은 무엇입니까?

var tests = new ServicesTests(); 
var testcase = new TestData(); 

var x = 0; 
foreach (XPathNavigator test in Service.Select("Testname")) 
{ 
    testcase.Testname[x] = test.Value; 
    x++; 
} 
tests.ServiceTests.Add(testcase); 

개체가 여기에 선언 된 :

public class ServicesTests 
{ 
    public List<TestData> ServiceTests = new List<TestData>(); 
} 

public class TestData 
{ 
    ... 
    public string[] Testname { get; set; } 
} 

지금 내가 널 값 참조 예외 경우를받을를 배열을 설정하려고합니다. 나는 이유를 이해하지만, 초기화 할 수있는 적절한 방법이 무엇인지 모르겠다. 얼마나 많은 값이 있는지 알 수있는 방법이 없기 때문이다. 내가 읽은 모든 예제는이 사실을 알고 있다고 가정하는 것 같습니다.

이 작업을 올바르게 수행하는 방법에 대한 제안이 있으십니까?

감사

편집 : 나는 목록을 사용하는 것은 여전히 ​​null 참조 오류를 반환하기 때문에 이전에없는 몇 가지 코드를 추가하는 업데이트되었습니다.

답변

1

대신 일반 List<string>을 사용하고 싶을 것입니다. 그냥 Add 메서드를 사용하여 그 안에 물건을 넣을 수 있습니다. 모든 것이 끝나고 완료 될 때 배열이 필요하면 myList.ToArray()으로 변환하기 쉽습니다.

+0

List 에는 자체 ToArray() 인스턴스 메소드가 있기 때문에 실제로 linq은 필요하지 않습니다. – phoog

+0

방금 ​​공개 목록 Testname {get; set;}을 사용하도록 내 선언을 변경 한 다음 내 코드를 testcase.Testname.Add (test.Value)로 변경하고 여전히 testcase에 대한 null 참조를 반환합니다. Testname. 지금 문제가 무엇인지 모르겠다 . – Jason

+0

오, 알았어, Ienumerables에 linq하는 데 너무 익숙해졌다. List 메서드이기도하다. –

4

확장형 배열이 필요한 경우 크기를 관리하고 필요에 따라 크기를 조절하는 코드를 작성해야합니다. 그렇지 않으면 을 사용하고 ToArray()을 사용하여 항목을 추가하면 배열로 변환 할 수 있습니다.

2

위의 좋은 답변의 예.

List<string> list = new List<string>(); 
foreach (XPathNavigator test in Service.Select("Testname")) 
{ 
    list.Add(test.Value); 
} 
var arrayIfYouStillNeedOne = list.ToArray(); 
0

값을 추가 할 때 동적으로 크기를 조정할 수있는 목록 컬렉션을 사용하고 필요하면 목록을 배열로 변환 할 수 있습니다.

var list = new List<string>(); 
foreach (XPathNavigator test in Service.Select("Testname")) 
{ 
    list.Add(test.Value); 
} 

// If you need to get the values as an array 

string[] array = list.ToArray(); 
0

당신은 LINQ와 함께 한 줄이 작업을 수행 할 수 있습니다 : 심지어 두 배열의 크기를 알 필요가 없습니다

testcase.TestName = Service.Select("Testname").Select(x => x.Value).ToArray(); 

.