错误 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 的根混乱:PatternNumbersOnly
或 NumbersOnly
等
注意:这个问题不同于 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
我想扩展字符串 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 的根混乱:PatternNumbersOnly
或 NumbersOnly
等
注意:这个问题不同于 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