为什么字典数组需要第二次初始化
本文关键字:第二次 初始化 字典 数组 为什么 | 更新日期: 2023-09-27 18:16:40
public partial class Form1 : Form
{
Dictionary<string, int>[] db_players = new Dictionary<string, int>[6];
public Form1()
{
db_players[0] = new Dictionary<string, int>();
db_players[0].Add("qwerty",7);
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show(db_players[0]["qwerty"].ToString());
}
}
db_players[0]. add ()如果不在构造函数中初始化它就不能工作。我不明白为什么,因为我上面已经做过了。为什么呢?不好意思,这个问题太蠢了
您不是在创建字典。您正在创建一个字典的数组。在c#中,当你初始化一个数组时,你并没有初始化它的元素。
有关更多信息,您可以在MSDN
上找到这个数组教程在这个链接中有一个注释,说明
如果在声明时未初始化数组,则数组成员将自动初始化为数组类型
的默认初始值。
对于引用类型,该值为空。这就是为什么你的代码不能工作
您正在声明一个包含6个字典的数组。每个数组元素都需要单独实例化。
要么做你现在做的,要么内联初始化它们:
Dictionary<string, int>[] db_players = new Dictionary<string, int>[6] {
new Dictionary<string, int>(),
new Dictionary<string, int>(),
new Dictionary<string, int>(),
new Dictionary<string, int>(),
new Dictionary<string, int>(),
new Dictionary<string, int>()
};
这一行
Dictionary<string, int>[] db_players = new Dictionary<string, int>[6];
创建一个长度为6的Dictionary<string, int>
数组,但它不设置db_players[0]
, db_players[1]
,…中的内容
可以用循环初始化数组:
for (int i=0; i<db_players.Length; i++)
{
db_players[i] = new Dictionary<string, int>();
}
如果你需要在一个语句中初始化,你可以使用数组初始化语法。
Dictionary<string, int>[] db_players = new Dictionary<string, int>[]
{
new Dictionary<string, int>(),
new Dictionary<string, int>(),
new Dictionary<string, int>(),
new Dictionary<string, int>(),
new Dictionary<string, int>(),
new Dictionary<string, int>()
};
Dictionary<string, int>[] db_players = new Dictionary<string, int>[6];
声明并初始化一个名为db_players的Dictionary数组列表。它不给db_players它的值。因此,需要db_players[0] = new Dictionary<string, int>();
为数组本身中的每个对象分配一个字典。