为了账号安全,请及时绑定邮箱和手机立即绑定

自定义集合初始化器

自定义集合初始化器

C#
慕莱坞森 2019-11-02 13:42:32
可以像下面的示例一样初始化实现IEnumerable和提供public void Add(/* args */)功能的类:List<int> numbers = new List<int>{ 1, 2, 3 };Add(int)在初始化之后调用函数3x List<int>。有没有一种方法可以为我自己的类显式定义此行为?例如,是否可以让初始化程序调用适当的Add()重载以外的函数?
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

不可以,编译器需要一个名为方法的方法Add来使集合初始化程序起作用。这是在C#规范中定义的,无法更改:


C#语言规范-7.5.10.3集合初始化程序

应用了集合初始值设定项的集合对象必须是实现的类型,System.Collections.IEnumerable否则会发生编译时错误。对于按顺序指定的每个指定元素,集合初始化程序Add将使用该元素初始化程序的表达式列表作为参数列表,在目标对象上调用一个方法,并对每个调用应用正常的重载解析。因此,收集对象必须包含Add每个元素初始化程序的适用方法。[强调我的]


当然,该Add方法可以采用多个参数(例如Dictionary<TKey, TValue>):


dic = new Dictionary<int, int> { 

    { 1, 2 },

    { 3, 4 }

};

// translated to:

dic = new Dictionary<int, int>();

dic.Add(1, 2);

dic.Add(3, 4);


查看完整回答
反对 回复 2019-11-02
  • 2 回答
  • 0 关注
  • 317 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信