2011/05/05
stringを引数に取るメソッドに$nullを渡すと勝手にstring.Emptyに変換されてしまう
仕様みたいです。以下、検証コード。
$def = @" public static string TestMethod(string str) { if(str==null) { return "null"; } else if(str==string.Empty) { return "empty"; } else { return "other"; } } "@ $test = Add-Type -memberDefinition $def -name "TestClass" -passThru $test::TestMethod($null)
結果は「null」ではなく「empty」になってしまいます。
Windows Phone 7 エミュレーターをビルド後アクティブにする « LiveSpac.esのコメント欄でも書いたのですが、回避策はリフレクション経由でメソッドを呼ぶしかなさそうです。
$test.GetMethod("TestMethod").Invoke($null, @($null))
このように、Invokeメソッドの第一引数はスタティックメソッドの実行なのでインスタンスを指定しないので$null、第二引数はメソッドに与える引数の配列を指定します。ここでは引数は一つ、その値は$nullなので、@($null)を指定します。このようにすると結果は「null」となり意図した結果が得られます。
元記事:http://blogs.wankuma.com/mutaguchi/archive/2011/05/05/198785.aspxプライバシーポリシー