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是一个字符串.阵列和属性混合在一起时是否有任何复杂性?
多谢你们!
你得到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)