【发布时间】:2016-07-27 06:56:24
【问题描述】:
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?
【问题讨论】:
-
把它作为答案发布,如果没有更好的我会接受。但这已经很好了。谢谢。
-
第二个是“更好”,它也适用于 v2。
-
PerSerAl 的答案更好,但如果需要,您也可以使用反射来调用方法。事实上,您可以使用反射来调用任意构造函数,甚至是非公共构造函数。其他方法也是如此。