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

PowerShell 4.0及更早版本无需New-Object的构造函数调用语法

PowerShell 4.0中.NET对象实例化替代语法的相关问题解答

我近日碰到一段旧代码,由此产生了疑问。我知道PowerShell 4.0里有两种.NET对象实例化的语法:

# 使用New-Object向构造函数传递多个参数
$ex = New-Object -TypeName System.IO.FileNotFoundException -ArgumentList 'No File Found!', 'C:\NoFile.txt'

# 替代语法——如何传递多个参数?
$ex = [System.IO.FileNotFoundException] 'No File Found!'

补充说明

  • class关键字及相关类支持功能是2016年随PowerShell 5.0引入的。
  • PowerShell 5.0还正式开放了原生.NET类构造函数方法。
  • 在新版本PowerShell中,New-Object cmdlet已不再是推荐用法,如今仅用于向后兼容(比如PowerShell 4.0场景),或是编写支持多代操作系统/PowerShell版本的脚本、函数和模块。

1. 该替代语法的官方文档在哪里?

PowerShell 4.0的官方文档中,这种语法被归类在类型加速器的实例化用法下,但早期文档对这个特性的描述比较零散,需要定位到PowerShell 4.0的专属文档板块查看相关说明。

2. 如何使用该替代语法传递多个参数并调用特定的构造函数重载?

要传递多个参数,只需将参数用逗号分隔,放在括号中(PowerShell 4.0里括号可选,但为了明确性建议添加),PowerShell会自动匹配对应的构造函数重载:

# 传递两个参数,匹配接受(string, string)的构造函数
$ex = [System.IO.FileNotFoundException]('No File Found!', 'C:\NoFile.txt')

如果存在多个重载导致匹配歧义,可以通过显式指定参数类型来引导PowerShell选择正确的构造函数:

# 明确指定参数类型,匹配特定重载
$ex = [System.IO.FileNotFoundException]([string]'No File Found!', [string]'C:\NoFile.txt')

3. 该替代语法是否有特定名称?

这种语法没有官方专属命名,社区通常称它为类型加速器实例化语法或者方括号构造函数语法。它本质是PowerShell类型加速器的扩展用法,允许直接通过类型名的方括号表示法调用构造函数。


内容的提问来源于stack exchange,提问作者Paul π

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:47:09