错误 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 个模式匹配之一,我不希望用 PatternNumbersOnly
或 NumbersOnly
等方法混淆对象的根。
注意:这个问题与这样的问题不同,因为我不是在问为什么存在这个问题,我正在寻找一种解决方法,以便我可以拥有此错误原因拒绝我的功能或类似功能。
你不能 - 没有"扩展属性"。
您可以获得的最好的 - 通过引入中间类从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