Возможный передать пустой указатель от Powershell до.Net API, который ожидает строку?

API:

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

Сценарий:

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's empty
It's empty
It's empty
It's empty
It's empty

Что я пропускаю?

13
задан Richard Berg 4 January 2010 в 21:59
поделиться

2 ответа

Согласно этой проблеме с подключением MS, это известная проблема. Там также размещена пара обходных путей, например, использование рефлексии для передачи параматеров (что умно, но глупо, что это необходимо). Будем здоровы!

7
ответ дан 1 December 2019 в 22:07
поделиться

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

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

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

.
2
ответ дан 1 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: