我只给出两段在实现上应该相同的代码。
Users.users = new List<User>
{
[0] = Users.Admin
}; // Исключение
Users.users = new List<User>
{
Users.Admin
}; // Все ок
如果有的话,这是 Data\Users.cs 文件
异常文本:
System.ArgumentOutOfRangeException:索引超出范围。索引必须是一个正数,并且它的大小不能超过集合的大小。参数名称:索引
差异 - 仅在我在问题开头产生的那段代码中。
这是 Git 上的项目的链接:Project on git
带有 exe 的文件夹,似乎一切正常:https ://yadi.sk/d/N6tfBD0Y3SyNFW
带有异常的 exe 文件夹:https ://yadi.sk/d/N6tfBD0Y3SyNFW
如何表现这个有问题的地方:
- 运行 exe(将打开“关于”之类的窗口)
- 删除在可执行文件旁边创建的 Records 文件夹
- 关闭窗口,注意异常。
- 尝试对“Good”可执行文件执行相同操作。
那么,如果代码在理论上没有差异,那么差异从何而来?
嗯,我找到了答案。像这里这样的索引元素的初始化
- 这是字典。创建字典后,调用该方法
Add(key, value),向字典中添加一个新元素。在List: 创建新 List 后,调用该方法Set(index, value),由于 index == 集合的大小,该方法无法赋值。如果有人看懂 IL 代码,那么这部分代码的 IL 代码
它会是这样的: