我想扩展字符串对象并将这些扩展作为嵌套类的一部分,但是直接这样做:
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
等
注意:此问题与this one之类的问题不同,因为我不知道为什么会出现此问题,我正在寻找一种解决方法,以便我可以获得此错误原因的功能或类似功能否认了我。
答案 0 :(得分:5)
你不能 - 没有"扩展属性"。
通过引入中间类从s.Patterns().NumbersOnly()
扩展方法返回,您可以获得最佳效果 - Patterns
。
示例将所有方法放在单个类中,但只要扩展方法满足"在顶级静态类中定义":
,您就可以按照任何方式将它们组织到不同的类中。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