stringを引数に取るメソッドに$nullを渡すと勝手にstring.Emptyに変換されてしまう - PowerShell Scripting Weblog

2011/05/05

仕様みたいです。以下、検証コード。

$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

トラックバック

トラックバックはまだありません

トラックバックPing:


コメント

コメントはまだありません


コメントをどうぞ

名前 (省略可) :
E-mail or URL (省略可) :


前の記事へ | 次の記事へ

Copyright © 2005-2016 Daisuke Mutaguchi All rights reserved

mailto: mutaguchi at roy.hi-ho.ne.jp

Awards

Books

Twitter