ber*_*ter 5 string powershell null parameter-passing powershell-5.0
在 PowerShell 中,可以定义 C# 代码并执行它。将 $null 传递到以下最简单的函数中表明 not null 被传递到函数中
Add-Type -TypeDefinition @"
public static class foo
{
public static void fooo(string a)
{
if(a!=null)
{
System.Console.WriteLine("Not Null. Is '" + a + "'");
}
}
}
"@ -Language CSharp
Run Code Online (Sandbox Code Playgroud)
按如下方式调用它会导致输出 Not Null。是 ''。这表明 $null 在 C# 中不为空。'IsNullOrEmpty' 或 'IsNullOrWhiteSpace' 之类的方法返回 true,因此 PowerShell 必须隐式地将 $null 转换为字符串。
[foo]::fooo($Null)
Run Code Online (Sandbox Code Playgroud)
除了在 C# 中调用 String.IsNullOrEnpty 之外,是否有更好的解决方法?注意:这与指定的“Add_Type”的 C# 语言无关。我正在使用 PowerShell V5。
显然,解决方案是“如果你想要一个,就不要传递$null
给一个[String]
参数$null
[String]
”。[NullString]
应该使用一个特殊的类。
PS > [foo]::fooo($Null)
Not Null. Is ''
PS > [foo]::fooo([NullString]::Value)
PS >
Run Code Online (Sandbox Code Playgroud)
我[NullString]
在 PowerShell 文档中找不到任何提及需要使用的地方,该类的源代码NullString
也没有包含任何解释其用途的注释。