关于C#中CliRootCommand实例化特殊语法的两处疑问
关于这段C#代码的解释
先贴出代码:
CliRootCommand _outerCommand = new CliRootCommand { new CliCommand("inner") { new CliOption<string>("--optionOne"), new CliOption<string>("--optionTwo") } };
问题1解答
是的,这行代码确实是在实例化CliRootCommand的新实例。在C#语法中,当调用无参数构造函数且后面紧跟对象初始化器(也就是那对{})时,末尾的()可以省略。编译器会自动补全无参数构造函数的调用,所以加不加()的运行效果完全一致。
问题2解答
第一行后的{ }是对象初始化器结合集合初始化器的语法:
CliRootCommand类型应该实现了IEnumerable接口,或者提供了合适的Add方法。初始化器里的new CliCommand("inner")会被编译器自动转换成调用_outerCommand.Add(...),把这个子命令添加到根命令实例中。- 同理,
CliCommand里的两个CliOption对象,也是通过集合初始化器语法,调用CliCommand的Add方法,把选项添加到这个子命令里。
这种写法是编译器提供的语法糖,替代了手动逐个调用Add方法的繁琐写法,让代码更简洁直观。
内容的提问来源于stack exchange,提问作者megaman
相关产品推荐
相关产品推荐

