当前位置: 首页 > 编程语言 > C#

列表属性的空集合初始值设定项结果为null分享

时间:2023-04-11 12:20:23 C#

C#学习教程:列表属性的空集合初始值设定项导致Null而ThisIsAList为空。voidMain(){varthing=newThing{ThisIsAList={}};Console.WriteLine(thing.ThisIsAList==null);//打印“True”}publicclassThing{publicListThisIsAList{get;放;为什么这不是编译错误?为什么结果为空?我想知道是否可能存在隐式转换,但以下尝试产生了编译错误:thing.ThisIsAList=Enumerable.Empty().ToArray();列出整数={0,1,2,3};根据AboutCollectionInitializersFromtheMSDNdocs,听起来集合初始化器基本上只是为您处理调用Add()。所以我寻找了List.Add可能的重载,但没有找到任何我认为适用的东西。有人可以从C#规范中解释这里发生了什么吗?来自C#5.0规范的第7.6.10.2节:在等号之后指定集合初始值设定项的成员初始值设定项是嵌入式集合的初始值设定项。不是将新集合分配给字段或属性,而是将初始化程序中给定的元素添加到字段或属性引用的集合中。字段或属性必须是满足§7.6.10.3中指定要求的集合类型。(强调我的)因此,由于您的集合初始化程序嵌套在另一个对象/集合初始化程序中,因此行为是它将初始化的成员解析为值,然后添加相关项。在这种情况下,该属性为null,因此解析了null值,并添加了初始化程序中的任何零条目。如果你真的尝试添加一个项目,它会抛出一个NRE,因为你试图将一个项目添加到一个空对象。以上就是C#学习教程的全部内容:list属性的空集合初始化器为null。不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: