【问题标题】:Name for the "AddRange" collection initializer? [duplicate]“AddRange”集合初始化程序的名称? [复制]
【发布时间】:2018-02-22 00:26:31
【问题描述】:

有一个 C# 功能,我不知道它的术语,因此无法找到有关它的文档。

允许您在初始化期间将元素添加到集合的“AddRange-like”语法的名称是什么?我特别指的是下面代码中记录的案例,我们没有调用构造函数(并且由于属性没有设置器而无法调用),而是似乎只是在集合上调用 AddRange。

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main(string[] args)
    {
        TestClass a = new TestClass()
        {
            // What is the name for this feature??
            List =
            {
                0,
                10,
                20,
                30
            }
        };
        Console.WriteLine(a.List.Count);
    }

    public class TestClass
    {
        private List<int> _list = new List<int>();
        public List<int> List { get { return _list; } }
    }
}

另外,我是否正确理解了这种语法的语义?它只是允许我们在集合上简写 AddRange/multiple-Add 语法,对吗?

.NET Fiddle 在这里,如果有人想运行示例代码:https://dotnetfiddle.net/i01HYv

【问题讨论】:

  • 我相当肯定语法只是被称为集合初始化器。实际上,它确实编译为在集合上调用 .Add,这就是为什么该语法不适用于数组,并且如果集合未初始化,则会崩溃。
  • 考虑到您在问题中提到了功能的名称,您为什么要问功能的名称是什么?
  • @Servy 我的困惑源于关于初始化程序的文档并不清楚在集合初始化期间构造函数调用是可选的,从而允许您将集合初始化程序用于您没有 Set 访问权限的属性。跨度>
  • @Servy - 完全准确地说,并非总是在所有情况下都调用类构造函数。对象 obj = System.Runtime.Serialization.FormatterServices .GetUninitializedObject(t);不调用构造函数。我知道 OP 并没有问这个问题,但认为指出来会很有趣。

标签: c# collections


【解决方案1】:

它是 C# 3.0 中引入的对象初始化器或集合初始化器语法

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 2023-03-18
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    相关资源
    最近更新 更多