将字符串数组中的值分配给自定义类型数组

时间:2016-09-01 13:12:48

标签: c# arrays nullreferenceexception

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

string[] countryNames = { "Afghanistan" , "Albania" , "Algeria", ... }

我还有一个名为Country的类,其中包含以下属性:

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

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

countryNames[]

然而,Country[] countries = new Country[193]; for (int i = 0; i < 193; i++) { countries[i].Name = countryNames[i]; } return countries; 会导致countries[i].Name。我无法看到问题出在哪里,因为属性NullReferenceException是一个字符串。当数组和属性混合在一起时是否有任何复杂性?

谢谢你们!

2 个答案:

答案 0 :(得分: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 });
}

然后从foreach你可以跳到linq:

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

答案 1 :(得分: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