提问人:TonyP 提问时间:10/16/2023 更新时间:10/16/2023 访问量:59
Extension Class 只能访问一个方法 [已关闭]
Extension Class only one method is accessible [closed]
问:
我有这个StringExtensions类
public static class StringExtensions
{
public static string LeftOf(string input, string delimiter, StringComparison sc = StringComparison.OrdinalIgnoreCase)
{
int index = input.IndexOf(delimiter, sc);
if (index >= 0) return input.Substring(0, index);
else
return input; // Delimiter not found, return the whole input string
}
public static string RightOf(string input, string delimiter, StringComparison sc = StringComparison.OrdinalIgnoreCase)
{
int index = input.IndexOf(delimiter, sc);
if (index >= 0) return input.Substring(index + delimiter.Length);
else
return string.Empty; // Delimiter not found, return an empty string
}
public static string RemoveBetweenTags(this string input, string startTag, string endTag, out string content)
{
content = null;
string pattern = $"{Regex.Escape(startTag)}(.*?){Regex.Escape(endTag)}";
Match match = Regex.Match(input, pattern);
if (match.Success) content = match.Groups[1].Value;
string result = Regex.Replace(input, pattern, string.Empty);
return result;
}
}
只能访问 RemoveBetweenTags 方法。 为什么其他两种方法都无法访问?
答:
1赞
John Alexiou
10/16/2023
#1
每个扩展方法都需要关键字。this
另外,我建议将 和 方法合二为一,这样您只需要进行一次昂贵的调用。使用参数将剩余文本返回到分隔符的右侧。LeftOf()
RightOf()
.IndexOf()
out
static class Program
{
static void Main(string[] args)
{
string input = @"aaa__bbb";
string left = input.UpTo("__", out var right);
Console.WriteLine(left); // "aaa"
Console.WriteLine(right); // "bbb"
}
}
public static class StringExtensions
{
public static string UpTo(this string input, string delimiter, out string remainder, StringComparison sc = StringComparison.OrdinalIgnoreCase)
{
int index = input.IndexOf(delimiter, sc);
if (index >= 0)
{
remainder = input.Substring(index + delimiter.Length);
return input.Substring(0, index);
}
else
{
remainder = string.Empty;
return input;
}
}
}
下一个:覆盖 CSS 的边缘扩展
评论
this
string