链式方法调用中的自引用对象

时间:2011-06-08 12:15:03

标签: c# self self-reference

如何在同一方法的参数中引用链式方法的对象。假设您有许多链式方法调用,它们修剪/子串一个字符串,如下所示:

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

问题是因为字符串的长度现在是未知的并且与原始字符串的长度不同,我如何在最后一次调用中子字符串(索引和长度可能取决于字符串本身的子字符串)。 / p>

谢谢!

1 个答案:

答案 0 :(得分:1)

简而言之,没有。

虽然使用扩展方法,您可以捕获##self##并使用lambda继续表达式。

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);
}