2016-09-01 17 views
3

と仮定私は文字列の配列を持っているの各要素の文字列プロパティに文字列配列から値を割り当てます。またCountryは、とりわけ、これらのプロパティを含むというクラスを持っている:カスタム型配列

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

私の目標は、カスタムタイプCountryの配列を作成し、Country[]の各要素のCountry.Nameプロパティに割り当てることです対応するインデックスの文字列値は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は例外をスローします。

だから、あなたはそれを初期化する必要があります。

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

forループを使用すると、foreachを使用していることをより良い方法:

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

そしてあなたは、LINQに飛躍することができますforeachから:

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

ありがとうございます。 Linqメソッドは、コードを1行で処理するので、さらに優れています。 – 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

関連する問題