gpt4 book ai didi

powershell - v5特殊方法 `New`与静态方法 `New`冲突

转载 作者:行者123 更新时间:2023-12-03 00:49:01 25 4
gpt4 key购买 nike

PowerShell v5带有一项新功能。代替老式的对象创建

New-Object System.Text.StringBuilder

可以使用新语法
[System.Text.StringBuilder]::new()

新语法虽然引入了一个问题。如果类具有静态方法 New,则无法再直接调用它。看起来像PowerShell
认为我们将要调用构造函数,而不是此静态方法。

我的真正问题案例无法在这里解释,因此我使用现有的类
只是一个例子。

此代码在PowerShell v4中有效
[System.Linq.Expressions.Expression]::New([psobject])

它调用静态方法 New并创建一个表达式。

在v5中失败
Cannot find an overload for "new" and the argument count: "1".
At line:1 char:5
+ [System.Linq.Expressions.Expression]::New([psobject])
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest

问题是我们如何在PowerShell v5中调用静态方法 New

最佳答案

new是常量字符串标记时,而不是在表达式定义的方法名称时,PowerShell调用构造函数。因此,您可以使用以下解决方法:

$New='New'
[System.Linq.Expressions.Expression]::$New([psobject])
# or
[System.Linq.Expressions.Expression]::('New')([psobject])
# or
[System.Linq.Expressions.Expression]::{New}([psobject])

另外,如果在 New之后不使用括号,则PowerShell将 PSMethod对象返回给您,您可以使用其 Invoke方法来调用它。
[System.Linq.Expressions.Expression]::New.Invoke([psobject])

关于powershell - v5特殊方法 `New`与静态方法 `New`冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34816021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com