none
Staticクラスのジェネリックメソッドの呼び出しについて RRS feed

  • 質問

  • List<T>のようなジェネリッククラスをPowerShellから利用るする方法はわかるのですが、

    StaticクラスのジェネリックメソッドはどのようにしてPowerShellから利用すればよいのかわかりません。

     

    例えば、Powershellでは利用しないと思いますが、

    Array.ForEach<T>(<T>[] array, System.Action<T> action)

    の型パラメータはどうやって指定すればよいのでしょうか?

     

     

    2011年3月23日 13:19

回答

  • ジェネリックのスタティックメソッドなら以下のページに呼び出し方法の記述がありました。
    Calling generic static method in PowerShell - Stack Overflow
    リフレクションを使って呼ぶことになります。 
    Action<T>デリゲートを作るのは難しそうですね。
    炎の作品 ― flamework.net ― » Windows PowerShell で delegate
    ここにスクリプトブロックをデリゲートに変換するスクリプトが公開されています。

    (追記)

    New-Delegate.ps1を使用してArray.ForEach<T>(<T>[] array, System.Action<T> action)を実行するにはこのような感じになるかと思います。

    $method=[array].getmethods()|?{$_.name -eq "ForEach"}
    [string[]]$array="b","a","c","a"
    $genericMethod=$method.MakeGenericMethod([string])
    $action= .\New-Delegate.ps1 System.Action``1[System.String] {Write-Host $args[0]}
    $genericMethod.invoke(@(),@($array,$action))

     



    • 回答としてマーク ごんきち 2011年3月26日 1:42
    2011年3月23日 14:05
    モデレータ

すべての返信

  • ジェネリックのスタティックメソッドなら以下のページに呼び出し方法の記述がありました。
    Calling generic static method in PowerShell - Stack Overflow
    リフレクションを使って呼ぶことになります。 
    Action<T>デリゲートを作るのは難しそうですね。
    炎の作品 ― flamework.net ― » Windows PowerShell で delegate
    ここにスクリプトブロックをデリゲートに変換するスクリプトが公開されています。

    (追記)

    New-Delegate.ps1を使用してArray.ForEach<T>(<T>[] array, System.Action<T> action)を実行するにはこのような感じになるかと思います。

    $method=[array].getmethods()|?{$_.name -eq "ForEach"}
    [string[]]$array="b","a","c","a"
    $genericMethod=$method.MakeGenericMethod([string])
    $action= .\New-Delegate.ps1 System.Action``1[System.String] {Write-Host $args[0]}
    $genericMethod.invoke(@(),@($array,$action))

     



    • 回答としてマーク ごんきち 2011年3月26日 1:42
    2011年3月23日 14:05
    モデレータ
  • ありがとうございます。

    まだすべてを理解できていませんが、Powershelからジェネリックメソッドを使用するのは

    結構手間なんですね・・・。

    .NET FrameWorkの勉強にもなるので頑張って理解してみます。

     

    • 回答としてマーク ごんきち 2011年3月25日 13:44
    • 回答としてマークされていない ごんきち 2011年3月26日 1:42
    2011年3月25日 13:38
  • 回答としてマークは、質問が解決された場合に役立った投稿につけるようにしましょう。
    (スレッドを閉じるための機能ではありません)
    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年3月25日 15:10