Подтвердить что ты не робот

Можно передать null из Powershell в .Net API, который ожидает строку?

API:

namespace ClassLibrary1
{
    public class Class1
    {
        public static string Test(string input)
        {
            if (input == null)
                return "It null";
            if (input == string.Empty)
                return "It empty";
            else
                return "Non-empty string of length " + input.Length;
        }
    }
}

Script:

add-type -path C:\temp\ClassLibrary1\ClassLibrary1\bin\Debug\ClassLibrary1.dll
[classlibrary1.class1]::Test($null)
[classlibrary1.class1]::Test([object]$null)
[classlibrary1.class1]::Test([psobject]$null)
[classlibrary1.class1]::Test($dummyVar)
[classlibrary1.class1]::Test($profile.dummyProperty)

Вывод:

It empty
It empty
It empty
It empty
It empty

Что мне не хватает?

4b9b3361

Ответ 1

В соответствии с этой

Ответ 2

Чтобы передать нулевое значение вызову API, используйте [NullString]:: Value.

Ответ 3

это то, как ведет себя PowerShell - он всегда будет пытаться преобразовать объект, пока он конвертируется в целевой тип (в этом случае строка). PowerShell всегда будет преобразовывать null (отсутствие значения) в String.Empty при вводе в строковый объект.

Взгляните на книгу Брюса Пайета "Windows PowerShell в действии", на стр. 142. Брюс является одним из архитекторов PowerShell.

Это своего рода один из тех документированных небольших ошибок на языке сценариев, и мы должны обязательно знать об этом.