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

本文关键字:模式 嵌套 一个 方法 扩展 CS1109 定义 静态类 错误 | 更新日期: 2023-09-27 17:57:10

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

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

。给出了本文标题所述的错误。

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

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

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

注意:这个问题与这样的问题不同,因为我不是在问为什么存在这个问题,我正在寻找一种解决方法,以便我可以拥有此错误原因拒绝我的功能或类似功能。

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

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

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

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

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