在 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
按如下方式调用它会导致输出 Not Null。是 ''。这表明 $null 在 C# 中不为空。 'IsNullOrEmpty' 或 'IsNullOrWhiteSpace' 之类的方法返回 true,因此 PowerShell 必须隐式地将 $null 转换为字符串。
[foo]::fooo($Null)
除了在 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 >
我找不到任何提到需要使用
[NullString]
在 PowerShell 文档中,the source code for the NullString
class 也没有包括任何解释其目的的评论。
关于string - 调用 C# 代码时,PowerShell $null 不再为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38958377/