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 });