【问题标题】:Self-reference object in chained method calls链式方法调用中的自引用对象
【发布时间】:2011-06-08 12:15:02
【问题描述】:

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

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

问题是因为字符串的长度现在是未知的并且与原始字符串的长度不同,我如何像上次调用那样子字符串(索引和长度可能取决于字符串本身的子字符串)。

谢谢!

【问题讨论】:

  • 好吧,我误读了这个问题。您指的是##SELF##,而不是方法链:)
  • 是的,对不起。我只是在评论你的帖子:-),但后来它消失了......
  • 不确定您希望##SELF## 指代什么。 Subscript 函数是什么?
  • 对不起,它应该是子字符串。我已经更新了这个问题,试图让它更清楚......

标签: c# self self-reference


【解决方案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);
}

【讨论】:

  • 好的,谢谢!以更实用的方式来做这件事很好,但我同意这变得比必要的复杂......我想最好的解决方案实际上是编写我自己的“SubstringWithIndexFromBack”函数,然后链接它......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 2016-05-25
相关资源
最近更新 更多