C# 中省略类型的 new() 语法是什么?相关代码用法问询
答案
你看到的语法既不是C#创建字符串的语法,也不是特殊写法,这是C# 9 及更高版本支持的「目标类型推导new表达式」(target-typed new expressions)特性。
具体解释
- C#中创建字符串不需要用这种写法:常规字符串直接用字面值
"some string goes here"即可,哪怕需要用new实例化字符串,也必须显式写new string(参数),且仅支持传入字符数组、指针等特定重载的参数,不会直接接收单个字符串字面量当参数。 throw语句要求后接派生自Exception的类型实例,不可能接收字符串类型,所以这段代码里的new(...)是实例化异常类的简写:当编译器可以从上下文明确推导你要创建的目标类型时,可以省略new关键字后的类型名,只保留参数列表。
用法示例
下面是等价的合法写法对比:
// 传统写法 throw new ArgumentException("some string goes here"); // 目标类型推导写法,上下文明确预期接收ArgumentException类型时可用 ArgumentException ex = new("some string goes here"); throw ex; // 直接在throw后使用的场景(提前声明了对应的自定义异常类) void ThrowError(string msg) => throw new CustomException(msg);
如果上下文存在类型歧义,这个写法会直接触发编译错误,必须显式声明类型才能正常编译。
内容的提问来源于stack exchange,提问作者manymanymore
相关产品推荐
相关产品推荐

