string - 调用 C# 代码时,PowerShell $null 不再为 null

标签 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

按如下方式调用它会导致输出 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/

相关文章:

c - MPI 中的问题 -> 地址 : (nil) 失败

MySQL 字符串中多次出现相同的字母

c++ - 如何将 LPWSTR 转换为 GUID?

c++ - 在CLion中测试Shell(.sh)文件

powershell - 将团队城市参数传递到 PowerShell 文件

sql - TSQL CASE LTRIM(RTRIM NULL

php - MySQL 和 PHP - 插入 NULL 而不是空字符串

另一个解析器中的 C 字符串解析器

python - 使用 find() 方法搜索字符串并返回字符串中第二次出现后的每个字符

amazon-web-services - 使用具有多个证书的 Invoke-WebRequest 在 PowerShell 中重写 CURL