将字符串数组中的值分配给自定义类型数组的每个元素的字符串 属性
Assign a value from a string array to the string property of each element of a custom type array
假设我有一个字符串数组 - countryNames[]
- 包含世界各国的名称:
string[] countryNames = { "Afghanistan" , "Albania" , "Algeria", ... }
我还有一个名为 Country
的 class,其中包含以下属性:
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
是一个字符串。数组和属性混合在一起会不会有什么问题?
谢谢大家!
你应该先制作一个新的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];
您仅为数组保留 space,各个元素初始化为 null
你得到 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 });
假设我有一个字符串数组 - countryNames[]
- 包含世界各国的名称:
string[] countryNames = { "Afghanistan" , "Albania" , "Algeria", ... }
我还有一个名为 Country
的 class,其中包含以下属性:
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
是一个字符串。数组和属性混合在一起会不会有什么问题?
谢谢大家!
你应该先制作一个新的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];
您仅为数组保留 space,各个元素初始化为 null
你得到 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 });