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



假设我有一个字符串数组countryNames[],其中包含世界上的国家名称:

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

我也有一个名为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是一个字符串。当数组和属性混合在一起时是否有任何复杂性?

谢谢你们了!

您获得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 });

你应该先创建一个新的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

最新更新