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

C# 将字符串数组中的值指定给自定义类型数组的每个元素的string属性,c#,arrays,nullreferenceexception,C#,Arrays,Nullreferenceexception,假设我有一个字符串数组-countryNames[],其中包含世界各国的名称: string[] countryNames = { "Afghanistan" , "Albania" , "Algeria", ... } 我还有一个名为Country的类,其中包含以下属性: public string CountryCode { get; set; } public string Name { get; set; } 我的目标是创建自定义类型Country的数组,并将Country[]的每个

假设我有一个字符串数组-
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;
Country[]国家=新国家[193];
对于(int i=0;i<193;i++)
{
国家[i].Name=countryNames[i];
}
返回国;
但是,
countries[i].Name
会导致
NullReferenceException
。我看不出问题出在哪里,因为属性
Country.Name
是一个字符串。当阵列和属性混合在一起时,是否存在任何复杂情况


谢谢大家

您应该先创建一个新的
国家/地区

Country[] countries = new Country[193];

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

return countries;

您只为数组保留空间,单个元素被初始化为
null

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

因此,您需要对其进行初始化:

for (int i = 0; i < 193; i++)
{
    countries[i] = new Country { Name = countryNames[i] };
}
然后从foreach跳到linq:

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

仅初始化数组是不够的。在进入for循环并将其添加到数组中之前,必须先创建国家/地区对象。然后您可以为每个国家的Name属性赋值。谢谢。Linq方法甚至更好,因为它只需一行代码就可以完成这项工作!
List<Country> countries = new List<Country>();
foreach(var countryName in countryNames
{
    countries.Add(new Country { Name = countryName });
}
string[] countryNames = { "Afghanistan", "Albania", "Algeria" };
var countried = countryNames.Select(item => new Country { Name = item });