2010-01-04 5 views
12

API:Có thể chuyển null từ Powershell sang API .Net mong đợi một chuỗi?

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; 
     } 
    } 
} 

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) 

Output:

 
It's empty 
It's empty 
It's empty 
It's empty 
It's empty 

tôi thiếu gì?

+1

Đây là một câu hỏi hay và tôi thực sự xấu hổ khi nói rằng tôi không biết về nó vì tôi đã là một con điếm PowerShell trong khoảng hai năm và làm được rất nhiều PowerShell/.NET interop. – Josh

Trả lời

6

Theo điều này MS connect issue, đây là sự cố đã biết. Có một vài cách giải quyết được đăng ở đó, quá, giống như sử dụng sự phản chiếu để vượt qua các paramaters (thông minh, nhưng hơi ngớ ngẩn khi nó được yêu cầu). Chúc mừng!

+0

Liên kết của bạn trỏ đến trang đăng nhập. Bạn có thể vui lòng trích dẫn các cách giải quyết được đăng ở đó, cho những người trong chúng ta, những người không có tài khoản kết nối MS. –

2

đây chỉ là cách PowerShell hoạt động - nó sẽ luôn cố gắng chuyển đổi một đối tượng miễn là nó có thể chuyển đổi thành loại mục tiêu (trong chuỗi trường hợp này). PowerShell sẽ luôn luôn chuyển đổi null (sự vắng mặt của một giá trị) thành String.Empty khi đúc thành một đối tượng chuỗi.

Hãy xem cuốn sách "Windows PowerShell in Action" của Bruce Payette, trang 142. Bruce là một trong những kiến ​​trúc sư đằng sau PowerShell.

Đó là một trong những tài liệu nhỏ của ngôn ngữ kịch bản và chúng tôi chắc chắn nên biết về nó.

14

Để chuyển giá trị null vào cuộc gọi API, hãy sử dụng giá trị [NullString] ::.

+0

Tuyệt đối! Lớp ['NullString'] (https://msdn.microsoft.com/en-us/library/system.management.automation.language.nullstring.aspx) là mới trong PowerShell 3 (từ 2012). Đây là lý do tại sao các câu trả lời khác không thể biết về '[NullString] :: Value'. –