[英]Is there a built-in class in the .Net framework that can be used to denote an AnsiString?
[英]How to add a class method to a built-in .net class in PowerShell?
我知道我可以像这样将实例方法添加到PowerShell中的内置.net类中。
PS C:\Users\a> [string] | Add-Member -MemberType ScriptMethod -Name test -Value {
>> param(
>> $name
>> )
>> Write-Host $name
>> }
>>
PS C:\Users\a> [string].test("Joe")
Joe
PS C:\Users\a>
我想知道是否可以添加一个我可以调用它的类方法,例如[string]::test("blah")
。
谢谢。
我想要这样做的原因是因为我针对.net 4.5编写了PowerShell脚本,并且使用了[string]::isnullorwhitespace
,这是.net 4和.net 4.5方法。 当我在仅安装.net 3.0的计算机上运行时,出现错误。 我不想修改使用该方法的所有位置,相反,我只想添加该方法(如果不存在)。 谢谢。
文件说
使用Add-Member cmdlet,可以将成员(属性和方法)添加到Windows PowerShell对象的实例 。
因此,我担心不可能以这种方式添加静态成员。
我认为您不是将成员添加到类中,而只是添加到类的实例中。 我将创建自己的函数Test-StringIsNullOrWhiteSpace
,该函数在.NET 4.0 / 4.5下运行时使用内置的IsNullOrWhiteSpace
方法,但在.NET Test-StringIsNullOrWhiteSpace
版本下使用您自己的实现:
filter Test-StringIsNullOrWhiteSpace
{
param(
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
[string]
# The string to test.
$InputObject
)
if( [string].GetMethods() | Where-Object { $_.Name -eq 'IsNullOrWhiteSpace' } )
{
return [string]::IsNullOrWhitespace( $InputObject )
}
return ($InputObject -eq $null -or $InputObject -match '^\s*$')
}
您应该能够像这样使用它:
if( Test-StringIsNullOrWhiteSpace $var )
{
Write-Host ('$var is null or only whitespace.')
}
$emptyVars = $vars | Test-StringIsNullOrWhiteSpace
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.