将字符串数组中的值分配给自定义类型数组的每个元素的字符串属性

Ren*_*ato 3 c# arrays nullreferenceexception

假设我有一个字符串数组countryNames[]- 包含世界各国的名字:

string[] countryNames = { "Afghanistan" , "Albania" , "Algeria", ... }
Run Code Online (Sandbox Code Playgroud)

我还有一个名为Country包含这些属性的类,其中包括:

public string CountryCode { get; set; }
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

我的目标是创建一个自定义类型的数组Country,并Country.Name为每个元素的属性赋值Country[]相应索引的字符串值countryNames[].我试着通过以下方式这样做,在我实现字符串数组的方法中:

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

countries[i].Name然而,引起NullReferenceException.我不知道问题在哪里,因为属性Country.Name是一个字符串.阵列和属性混合在一起时是否有任何复杂性?

多谢你们!

Gil*_*een 6

你得到a的原因NullReferenceException是,当你初始化一个对象数组时,它不会初始化其中的项.这意味着当您访问countries[i].Name该对象时不存在,然后.Name抛出异常.

所以你需要初始化它:

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

使用for循环的更好方法是使用foreach:

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

然后从foreach你可以跳到linq:

string[] countryNames = { "Afghanistan", "Albania", "Algeria" };
var countried = countryNames.Select(item => new Country { Name = item });
Run Code Online (Sandbox Code Playgroud)