PowerShell $null is not null any more when calling into C# code

Question:

In PowerShell one can define C# code and execute it. Passing in $null into the following simplest function shows that not null gets passed into the function

Calling it as follows leads to the output Not Null. Is ”. This shows that $null was not null in C#. Methods like ‘IsNullOrEmpty’ or ‘IsNullOrWhiteSpace’ return true, so PowerShell must have implicitly converted the $null into a string.

Any ideas why this is happening and if there is a better fix apart from rather calling String.IsNullOrEnpty in C#?
NB: This happens irrespective of the C# language specified ‘Add_Type’. I’m using PowerShell V5.

Answer:

Evidently the solution is “don’t pass $null to a [String] parameter if you want a $null [String]“. There is a special [NullString] class that should be used instead.

I can’t find any mentions of the need to use [NullString] in the PowerShell documentation, nor does the source code for the NullString class include any comments explaining its purpose.

Source:

PowerShell $null is not null any more when calling into C# code by licensed under CC BY-SA | With most appropriate answer!

Leave a Reply