You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中构造函数调用后大括号初始化语法是什么?

问题解答

你看到的是C#的集合初始化器语法,核心原因是:这种写法不是给Reminders属性重新赋值,而是调用该属性返回的集合实例的Add方法,往里面添加元素。

具体拆解:

  • 首先,SampleCustomer里的Reminders是只读属性(只有get访问器,用表达式体=>实现),它返回的是类内部已经初始化好的私有字典_reminders实例。
  • 你写的{ Reminders = { ... } }属于对象初始化器的嵌套写法,这里的=不是赋值操作——因为Reminders是只读的,直接赋值会编译报错。这个语法的实际逻辑是:
    1. 先调用SampleCustomer的构造函数创建对象实例。
    2. 访问该实例的Reminders属性,获取到内部的Dictionary<DateTime, string>对象。
    3. 对这个字典对象应用集合初始化器,也就是依次调用它的Add方法,把{ new DateTime(...), "xxx" }这些键值对添加进去。

等价的手动代码:

你看到的初始化代码完全等价于:

SampleCustomer c = new SampleCustomer("customer one", new DateTime(2010, 5, 31));
c.Reminders.Add(new DateTime(2010, 08, 12), "childs's birthday");
c.Reminders.Add(new DateTime(1012, 11, 15), "anniversary");

为什么能这么用?

只要一个对象实现了IEnumerable接口,并且包含匹配参数的Add方法(这里字典的Add(DateTime, string)正好匹配初始化器里的键值对格式),就可以用这种集合初始化器语法来添加元素——不管这个对象是通过属性获取的,还是直接创建的。

内容的提问来源于stack exchange,提问作者bigSloppy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:15:23