RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 793079
Accepted
Victor Gorban
Victor Gorban
Asked:2020-03-04 00:53:31 +0000 UTC2020-03-04 00:53:31 +0000 UTC 2020-03-04 00:53:31 +0000 UTC

以通常方式和通过索引初始化 List 集合的区别

  • 772

我只给出两段在实现上应该相同的代码。

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

如何表现这个有问题的地方:

  1. 运行 exe(将打开“关于”之类的窗口)
  2. 删除在可执行文件旁边创建的 Records 文件夹
  3. 关闭窗口,注意异常。
  4. 尝试对“Good”可执行文件执行相同操作。

那么,如果代码在理论上没有差异,那么差异从何而来?

c#
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Victor Gorban
    2020-03-04T01:45:17Z2020-03-04T01:45:17Z

    嗯,我找到了答案。像这里这样的索引元素的初始化

    var numbers = new Dictionary<int, string> {   
    [7] = "seven",   
    [9] = "nine",   
    [13] = "thirteen"   
    }; 
    

    - 这是字典。创建字典后,调用该方法Add(key, value),向字典中添加一个新元素。在List: 创建新 List 后,调用该方法Set(index, value),由于 index == 集合的大小,该方法无法赋值。

    如果有人看懂 IL 代码,那么这部分代码的 IL 代码

    var list = new List<string>
                           {
                              [0] = "Hello"
                           };
    
            var dict = new Dictionary<string, string>
                           {
                              [string.Empty] = "That's cool"
                           };
    

    它会是这样的:

    // [183 13 - 186 30] 
    IL_0000: newobj       instance void class [mscorlib]System.Collections.Generic.List`1<string>::.ctor()
    IL_0005: dup          
    IL_0006: ldc.i4.0     
    IL_0007: ldstr        "Hello"
    IL_000c: callvirt     instance void class [mscorlib]System.Collections.Generic.List`1<string>::set_Item(int32, !0/*string*/)
    IL_0011: pop          
    
    // [188 13 - 191 30]
    IL_0012: newobj       instance void class [mscorlib]System.Collections.Generic.Dictionary`2<string, string>::.ctor()
    IL_0017: ldsfld       string [mscorlib]System.String::Empty
    IL_001c: stloc.0      // V_0
    IL_001d: dup          
    IL_001e: ldloc.0      // V_0
    IL_001f: ldstr        "That's cool"
    IL_0024: callvirt     instance void class [mscorlib]System.Collections.Generic.Dictionary`2<string, string>::set_Item(!0/*string*/, !1/*string*/)
    IL_0029: pop  
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5