1

同じメソッドの引数で、チェーンされたメソッドのオブジェクトをどのように参照しますか。次のように文字列をトリム/サブストリング化するチェーンメソッド呼び出しがいくつかあるとします。

str.Substring(varLen1).Substring(varLen2).Substring(1,##self##.Length-2)

問題は、文字列の長さが不明で元の文字列の長さと異なるため、最後の呼び出しのようにサブ文字列(インデックスと長さが文字列自体に依存する可能性があるサブ文字列)をどのように行うかです。

ありがとう!

4

1 に答える 1

1

要するに、違います。

拡張メソッドを##self##使用すると、ラムダをキャプチャして使用し、式を続行できます。

public static TResult WithSelf<TSource, TResult> (this TSource x, Func<TSource, TResult> f)
{
    return f (x);
}

str.Substring (STDIN_PFX_FN.Length)
    .Trim (new char[] {'"', ' '})
    .WithSelf (x => x.Substring (1, x.Length - 2))

私はそれが読むのがより複雑で醜くなり、単に別の関数を作成することを好むと思う傾向があります。

str = Clean(str);

private string Clean (string str)
{
    str = str.Substring (STDIN_PFX_FN.Length).Trim (new char[] {'"', ' '});
    return str.Substring (1, str.Length - 2);
}
于 2011-06-08T12:51:57.757 に答える