2016-09-01 4 views
3

가정하자 내가 문자열 배열을 가지고 각 요소의 문자열 속성에 문자열 배열에서 값을 할당사용자 정의 형의 배열

public string CountryCode { get; set; } 
public string Name { get; set; } 

내 목표는 사용자 정의 유형 Country의 배열을 만들고, Country[]의 각 요소의 Country.Name 속성에 할당하는 것입니다 또한 클래스는 Country이 다른 사람의 사이에서, 이러한 속성을 포함 불렀다 해당 인덱스의 문자열 값은 countryNames[]입니다. 내가 문자열 배열을 구현 동일한 방법으로, 다음과 같은 방법으로 그렇게 시도 :

Country[] countries = new Country[193]; 
for (int i = 0; i < 193; i++) 
{ 
    countries[i].Name = countryNames[i]; 
} 
return countries; 

그러나 countries[i].Name가하는 NullReferenceException됩니다. Country.Name은 문자열이므로 문제가있는 곳을 볼 수 없습니다. 배열과 속성이 함께 섞일 때 어떤 문제가 있습니까?

고마워요!

+1

배열 초기화만으로는 충분하지 않습니다. for 루프를 입력하기 전에 국가 개체를 만들어 배열에 추가해야합니다. 그런 다음 각 국가의 Name 속성에 값을 할당 할 수 있습니다. – Sagar

답변

6

받는 초기화된다 이유가 NullReferenceException 인 이유는 객체의 배열을 초기화 할 때 객체의 배열을 초기화하지 않기 때문입니다. 그 의미는 그 객체가 존재하지 않는 countries[i].Name에 액세스 할 때 .Name이 예외를 던집니다.

그래서 당신은 그것을 초기화해야합니다

List<Country> countries = new List<Country>(); 
foreach(var countryName in countryNames 
{ 
    countries.Add(new Country { Name = countryName }); 
} 

그리고 다음 foreach 문에서 당신은 LINQ로 도약 할 수 있습니다 :

for (int i = 0; i < 193; i++) 
{ 
    countries[i] = new Country { Name = countryNames[i] }; 
} 

foreach를 for 루프를 사용하고 사용하는 더 좋은 방법을

string[] countryNames = { "Afghanistan", "Albania", "Algeria" }; 
var countried = countryNames.Select(item => new Country { Name = item }); 
+0

감사합니다. Linq 메서드는 한 줄의 코드로 작업을 수행하므로 훨씬 좋습니다! – Renato

+0

@RenatodeA. - 천만에요 :) –

2

당신은 새로운 Country 먼저 확인해야합니다 :

Country[] countries = new Country[193]; 

for (int i = 0; i < 193; i++) 
{ 
    countries[i] = new Country(); 
    countries[i].Name = countryNames[i]; 
} 

return countries; 

함으로써 : 당신은 배열을위한 공간을 예약하는

Country[] countries = new Country[193]; 

을 개별 요소는 null

관련 문제