ber*_*d_k 33 parameters powershell
请试试这个:
function f1
{
param(
[Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
[string]
$Text
)
$text
}
function f2
{
param(
[Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
#[string]
$Text
)
$text
}
function f3
{
param(
[Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$true)]
[string]
$Text
)
$text
}
f1 ''
f2 ''
f3 ''
Run Code Online (Sandbox Code Playgroud)
这里f1抛出一个错误.现在试试
f2 $null
f3 $null
Run Code Online (Sandbox Code Playgroud)
这次只有f2抛出一个错误.我想要的是一个函数f,所以
f '' # is accepted
f $null # returns an error
Run Code Online (Sandbox Code Playgroud)
Sha*_*evy 62
Mandatory属性会阻止null和empty值,并提示您输入值.要允许空值(包括null),请添加AllowEmptyString参数属性:
function f1
{
param(
[Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
[AllowEmptyString()]
[string]$Text
)
$text
}
Run Code Online (Sandbox Code Playgroud)
以下是符合要求的解决方案.
function f1
{
param(
[Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
$Text
)
Write-Host 'Working'
$text
}
f1 ''
f1 $null
Run Code Online (Sandbox Code Playgroud)
输出:
Working
f1 : Cannot bind argument to parameter 'Text' because it is null.
Run Code Online (Sandbox Code Playgroud)
警告
为了满足要求,我们必须省略显式类型声明[string].问题是PowerShell倾向于在[string]指定类型的任何地方将空值转换为空字符串.因此,如果我们使用类型声明,那么null值实际上永远不会出现在函数中.
PS以下是提交的相关问题: 无法将null作为null传递给具有String类型参数的.NET方法
| 归档时间: |
|
| 查看次数: |
32956 次 |
| 最近记录: |