[英]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.