当前位置: 首页 > 知识库问答 >
问题:

PowerShell$null在调用C#代码时不再为null

南门茂才
2023-03-14

在PowerShell中,可以定义C#代码并执行它。将$null传递到以下最简单的函数中,表明没有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# 中不为空。像“是空的”或“是空的”这样的方法返回真值,因此PowerShell必须隐式地将$null转换为字符串。

[foo]::fooo($Null)

了解为什么会发生这种情况,以及除了调用字符串之外是否有更好的解决方案。C#中的IsNullOrEnpty?注意:无论指定的C#语言是“Add_Type”,都会发生这种情况。我使用的是PowerShell V5。

共有1个答案

彭高畅
2023-03-14

显然,解决方案是“如果您想要$null[String]参数,请不要将$null[String]”。应该使用一个特殊的[NullString]类。

PS > [foo]::fooo($Null)
Not Null. Is ''
PS > [foo]::fooo([NullString]::Value)
PS >

我在PowerShell留档中找不到任何提及需要使用[NullString]的地方,NullString类的源代码也没有包含任何解释其用途的注释。

 类似资料:
  • 我有两门课。在一节课上,我创建并发起了一个活动,如下所示: 客户添加类 MyWindow类 现在,当我从类调用方法时,(当我订阅方法到事件时),不会被调用。调试器显示为空。我搜索了几个小时,没有找到解决办法。我跟随了这个链接,但仍然为空。如有任何指导/帮助,将不胜感激。

  • 我应该写吗 而是为这样的架构做好准备,还是仅仅是我的偏执狂?

  • 问题内容: 有没有人能将C#代码集成到Java应用程序中呢? 代码很小,所以我可以用Java重写,但是如果可能的话,我宁愿重用代码。不要重复自己,等等。 另外,我知道我可以将C#公开为Web服务或其他任何东西,但是其中包含一些安全性/加密功能,因此,我宁愿将其紧密集成。 编辑:它将在基于服务器的应用程序上,因此“下载”另一个运行时是无关紧要的。 问题答案: 有一个IL到Java字节码编译器Gras

  • 本文向大家介绍Swift调用Objective-C代码,包括了Swift调用Objective-C代码的使用技巧和注意事项,需要的朋友参考一下 最近iOS开发之新编程语言Swift在iOS开发圈内反响比较大,国内外都有很多教程或小示例。 虽然Swift这门语言仍然在不断的进化之中,而且变动还是比较大,苹果公司也不承诺目前所写代码会在将来兼容,但仍挡不住iOS开发者的热情。 为什么要使用Swift调

  • gcc-g-i/usr/lib/jvm/java-1.6.0-openJDK-1.6.0.0.x86_64/include/-i/usr/lib/jvm/java-1.6.0-openJDK-1.6.0.0.x86_64/include/-i/usr/lib/jvm/java-1.6.0-openJDK-1.6.0.0.x86_64/include/-i/usr/lib/jvm/java-1.6.

  • 问题内容: 我有一个C函数,我想从C 调用。我无法使用“ ”这样的方法,因为C函数无法使用g 进行编译。但是使用gcc可以很好地编译。有什么想法如何从C ++调用函数吗? 问题答案: 像这样编译C代码: 然后是这样的C ++代码: 然后使用C ++链接器将它们链接在一起: 当您包含C函数的声明时,还必须告诉C ++编译器C头即将到来。因此开始于: 应该包含以下内容: (在此示例中,我使用了gcc,