良いニュースは、PowerShellのv3のは、一般的な方法への結合ではるかに優れている:彼は実際にそれを行う方法を示していないので、ここでの検証作業のコードサンプルです(そしてそれらをreified?)あなたはしばしば特別な何かをする必要はありませんが、通常の方法と同じようにそれを呼び出す。これが現在動作するすべての基準を指定することはできませんが、私の経験では一般的なパラメータを使用した特定の状況では、PowerShell v4(おそらくその存在または過負荷など)でも回避策が必要です。
同様に、Func<T1, T2, TResult>
パラメータを渡すなど、ジェネリックパラメータをメソッドに渡すときに問題が発生することがあります。
一つの仕事私の周りにMakeGenericMethodまたは他のアプローチは、ちょうど私のスクリプトで直接、迅速C#のラッパークラスを入れて、C#、すべての一般的なマッピングを整理できるようにするよりも、はるかに簡単であることを...
ここEnumerable.Zip
メソッドをラップするこのアプローチの例です。この例では、C#クラスはまったく汎用ではありませんが、厳密には必要ではありません。
Add-Type @'
using System.Linq;
public class Zipper
{
public static object[] Zip(object[] first, object[] second)
{
return first.Zip(second, (f,s) => new { f , s}).ToArray();
}
}
'@
$a = 1..4;
[string[]]$b = "a","b","c","d";
[Zipper]::Zip($a, $b);
これが生成します。
f s
- -
1 a
2 b
3 c
4 d
私はより良いPowerShellの方法が「郵便番号」二つの配列があると確信していますが、アイデアを得ます。私がここで避けた本当の挑戦は、(C#クラスの)3番目のパラメータをZip
にハードコードしていたので、その方法を理解する必要はありませんでした。Func<T1, T2, TResult>
(PowerShellの方法もあります?)。
出典
2015-01-29 00:54:46
TCC
申し訳ありませんが、私は私の声明に立っています - '直接*できません* PowerShell'です。 :-)素晴らしい作業を進めています...しかし、実際、PowerShellチームはこの穴を修正する必要があります。 –
これは組み込みのサポートがあることがKeithと合意していますが、これは解決策であるため(直接的でない場合でも)、この回答は目立ちます。 –
長時間のコードサンプルは、OPに対処する必要はなく、MakeGenericMethodで十分です。 – JohnC