Extension Class 只能访问一个方法 [已关闭]

Extension Class only one method is accessible [closed]

提问人:TonyP 提问时间:10/16/2023 更新时间:10/16/2023 访问量:59

问:


这个问题是由错别字或无法再现的问题引起的。虽然类似的问题可能在这里是主题,但这个问题的解决方式不太可能帮助未来的读者。

上个月关闭。

我有这个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 方法。 为什么其他两种方法都无法访问?

C# 扩展方法

评论

3赞 D M 10/16/2023
其他两种方法的第一个 () 参数前面缺少关键字。thisstring
0赞 pm100 10/16/2023
你在其他 2 个的声明中错过了“这个”

答:

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;
        }
    }
}