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

C#中集合初始化语法的名称、作用及省略()的场景与原因

代码中独立{}的语法说明及构造函数()省略规则

一、独立{}的语法名称与作用

你代码里的双层{ { ... } }是C#的集合初始化器+元素初始化器组合语法:

  • 外层的{}是集合初始化器:用来直接创建并初始化OpenApiSecurityRequirement实例,本质是语法糖——编译器会自动调用无参构造函数创建对象,然后把初始化器里的元素添加到集合中,省去了手动调用Add()方法的麻烦。
  • 内层的{}是集合元素初始化器:因为OpenApiSecurityRequirement是一种键值对类型的集合(键为OpenApiSecurityScheme,值为string[]),内层的{}用来定义集合中的单个键值对元素,把对应的OpenApiSecurityScheme实例和空字符串数组打包成一组元素,添加到集合里。

二、构造函数()的省略规则

你问的new OpenApiSecurityRequirement()能不能省略(),答案是完全可以,满足以下两个条件即可:

  1. OpenApiSecurityRequirement拥有无参数构造函数(要么是编译器自动生成的默认无参构造,要么是开发者手动定义的);
  2. 创建实例时紧接着使用了集合/对象初始化器(也就是后面跟着{ ... })。

为什么能省略?

当你使用new 类型 { ... }的写法时,编译器会自动完成两个步骤:先调用该类型的无参构造函数创建实例,再执行初始化器里的元素添加或属性赋值逻辑。此时()属于冗余语法,省略后功能完全一致。

举个极简示例验证:

// 两种写法效果完全相同
var req1 = new OpenApiSecurityRequirement { /* 初始化内容 */ };
var req2 = new OpenApiSecurityRequirement() { /* 初始化内容 */ };

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:05:39