有{}运营商吗?

Byy*_*yyo 6 c# list

您可以使用

List<string> sList = new List<string>() { "1", "2" };
Run Code Online (Sandbox Code Playgroud)

创建一个新列表并添加2个项目.该{ "1", "2" }双组分只能是因为List<T>已经实施了Add()方法.

我的问题:{}类似于操作员,可以重载,例如两次添加项目

Yuv*_*kov 12

是{}类似于操作符,可以重载,例如两次添加项目

任何提供Add方法,内置或作为扩展方法(从C#-6开始)的集合类型都可以使用{ }语法提供的集合初始值设定项.如果您的Add方法将相同的项目添加到该集合两次,那么它就是这样做的.

如果您希望{ }更改行为,则必须覆盖或重载Add集合上的方法.

一些额外的规范优点(取自这个答案):

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

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