错误CS1109扩展方法必须在顶级静态类中定义; Patterns是一个嵌套类

Kra*_*ime 0 c# c#-6.0

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

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

...给出了这篇文章标题所述的错误.

我怎么能以不同的方式写这个,这样当我调用它时,可以像这样调用它:

string s = "abcd1234";
s = s.Patterns.NumbersOnly();
Run Code Online (Sandbox Code Playgroud)

我知道我可以NumbersOnly作为直接的孩子移动StringExtensions以使错误消失,但我的意图是将方法组织成具有许多方法的类别.在这个例子中,NumbersOnly只是我打算在那里进行的大约40个模式匹配中的一个,我不希望用以下方法混淆对象的根; PatternNumbersOnly或者NumbersOnly等等.

注意:这个问题是不是这样的问题不同的这一个,因为我没有问为什么这个问题的存在,我要寻找一个解决办法,这样我可以有此错误的原因是否认我的功能或类似的功能.

Ale*_*kov 5

你不能 - 没有"扩展属性".

你可以得到最好的 - s.Patterns().NumbersOnly()通过引入中间类来从Patterns扩展方法返回.

Sample将所有方法放在单个类中,但只要扩展方法满足"在顶级静态类中定义",您就可以按照任何方式将它们组织到不同的类中:

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
Run Code Online (Sandbox Code Playgroud)

  • 或者,`NumbersOnly`只能是`PatternsX`的实例方法. (2认同)