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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:39:05