Объект самоссылки в цепочечных вызовах методов - PullRequest
1 голос
/ 08 июня 2011

Как вы ссылаетесь на объект связанного метода в аргументах того же самого метода.Допустим, у вас есть несколько вызовов метода, которые обрезают / подставляют строку, например, так:

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

Проблема заключается в том, что, поскольку длина строки теперь неизвестна и отличается от длины исходной строки, какподстрока, как в последнем вызове (подстрока, где индекс и длина могут зависеть от самой строки).

Спасибо!

1 Ответ

1 голос
/ 08 июня 2011

Короче, нет.

Хотя с помощью метода расширения вы можете захватить ##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);
}
...