错误 CS1109 扩展方法必须在顶级静态 class 中定义;模式是嵌套的 class

Error CS1109 Extension methods must be defined in a top level static class; Patterns is a nested class

我想扩展字符串 object 并将这些扩展作为嵌套 class 的一部分,但是直接这样做 :

public static class StringExtensions
{
    public static class Patterns
    {
        public static string NumbersOnly(this string s)
        {
            return new String(s.Where(Char.IsDigit).ToArray());
        }
    }
}

... 给出此 post.

标题所述的错误

我怎样才能写得不一样,这样当我调用它时,它就可以这样调用了:

string s = "abcd1234";
s = s.Patterns.NumbersOnly();

我知道我可以将 NumbersOnly 移动为 StringExtensions 的直接 child 以使错误消失,但是我的目的是将方法组织到类别中,这些类别将具有很多方法。在这个例子中,NumbersOnly 只是我打算在那里进行的大约 40 种模式匹配中的一种,我不希望使用以下方法使 object 的根混乱:PatternNumbersOnlyNumbersOnly

注意:这个问题不同于 this one 之类的问题,因为我不是在问为什么存在这个问题,我正在寻找解决方法,以便我可以拥有导致此问题的功能或类似功能错误是拒绝我。

你不能 - 没有 "extension properties"。

您可以获得最好的 - s.Patterns().NumbersOnly() 通过从 Patterns 扩展方法引入中间 class 到 return。

示例将所有方法放在单个 class 中,但您可以根据需要以不同的 class 方式组织它们,只要扩展方法满足 "defined in a top level static class":

public static class StringExtensions
{
  public class PatternsX
  { 
    public string Value {get;set;}
  }

  public static PatternsX Patterns(this string s)
  {
    return new PatternsX { Value = s};
  }

  public static string NumbersOnly(this PatternsX s)
  {
    return new String(s.Value.Where(Char.IsDigit).ToArray());
  }
}

....    
Console.WriteLine("123ver".Patterns().NumbersOnly()); // results in 123