none
PowershellでSystem.Linq名前空間下のクラス利用 RRS feed

  • 質問

  • たびたびすいません。

    ひとつ前の質問と微妙に被るのですが、LinqのジェネリックメソッドってPowershellで利用できるのでしょうか?

    以下 「Linq.Enumerable」を利用できているよですが、

    http://hidori.jp/blog/2011/01/17/9

    私の環境では利用できません。(FrameWork 4 インストール済み)

    何か特殊な設定がいるのでしょうか?

     

    2011年3月25日 13:49

回答

  • んー、これコードに一部誤りがありますね。

    Where-Object {$MethodInfo.GetGenericArguments().Length -eq $GenericArgumentTypes.Length} |

    は正しくはこうだと思います。

    Where-Object {$_.GetGenericArguments().Length -eq $GenericArgumentTypes.Length} |

    • 回答としてマーク ごんきち 2011年3月26日 13:32
    2011年3月25日 14:46
    モデレータ

すべての返信

  • んー、これコードに一部誤りがありますね。

    Where-Object {$MethodInfo.GetGenericArguments().Length -eq $GenericArgumentTypes.Length} |

    は正しくはこうだと思います。

    Where-Object {$_.GetGenericArguments().Length -eq $GenericArgumentTypes.Length} |

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

    できました。

    やっぱり、まだまだPowershellからのジェネリックメソッドの呼び出し方が

    理解できていないようです。

    もう少し勉強してみます。

     

    2011年3月26日 13:40
  • PowerShellにはジェネリックメソッドを呼び出す機能が文法としては備わっていないので、.NET Frameworkのリフレクションの機能を使って呼び出しているという感じですね。

    .NETのリフレクションについては
    http://msdn.microsoft.com/ja-jp/library/cxz4wk15(VS.80).aspx
    などを参考にしてみてください。この中に

    リフレクションとジェネリックの概要
    http://msdn.microsoft.com/ja-jp/library/ms172334(VS.80).aspx
    という項目もあります。

    2011年3月27日 14:48
    モデレータ
  • 具体的に何をやりたいかにもよると思うんですよね。

    PowerShell は、C# や VB と違い、そもそもパイプライン処理を機能として備えています。このため、C# や VB の Linq の機能を用いなくても、シーケンスに対する処理は、PowerShell の標準的な機能として使用できています。

    たとえば、C# にて、

    Directory.EnumFiles().Where(f => f.Size > 1024*1024).Select(f => new { f.Name, $f.Size }).OrderBy(t => t.Size);<br/>
    

    というような操作は、PowerShell では、

    Get-ChildItem | where $_.Size -gt 1MB | select -Property Name, Size | Sort -Property Size
    
    

    とかけます。

     

    2011年3月31日 4:02