在 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# 中不为 null。 “IsNullOrEmpty”或“IsNullOrWhiteSpace”等方法返回 true,因此 PowerShell 必须已将 $null 隐式转换为字符串。
[foo]::fooo($Null)
任何想法为什么会发生这种情况,除了在 C# 中调用 String.IsNullOrEnpty 之外是否有更好的解决方案?
注意:无论指定的“Add_Type”是哪种 C# 语言,都会发生这种情况。我正在使用 PowerShell V5。
显然解决方案是“不要通过$null
to a [String]
参数,如果你想要一个$null
[String]
”。有一个特殊的[NullString]
应该使用的类。
PS > [foo]::fooo($Null)
Not Null. Is ''
PS > [foo]::fooo([NullString]::Value)
PS >
我找不到任何需要使用的提及[NullString]
在 PowerShell 文档中,也没有的源代码NullString class包括解释其目的的任何评论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)