Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该如何命名这个扩展方法?_C#_.net_Extension Methods_Naming - Fatal编程技术网

C# 我应该如何命名这个扩展方法?

C# 我应该如何命名这个扩展方法?,c#,.net,extension-methods,naming,C#,.net,Extension Methods,Naming,我已经为字符串操作编写了一个扩展方法。我不知道该给它起什么名字——因为它将成为团队中前端开发人员将使用的基本库的一部分。这是班级成员的个人资料 信息:字符串类型的实用程序扩展方法。此方法的重载可能会对除空格以外的字符执行相同的操作[使用参数中提供的内容] 目的:将所有中间或中间的空间修剪为单个空间。 Ex: string Input = "Hello Token1 Token2 Token3 World! "; string Output = Input.Trim

我已经为字符串操作编写了一个扩展方法。我不知道该给它起什么名字——因为它将成为团队中前端开发人员将使用的基本库的一部分。这是班级成员的个人资料

信息:字符串类型的实用程序扩展方法。此方法的重载可能会对除空格以外的字符执行相同的操作[使用参数中提供的内容]
目的:将所有中间或中间的空间修剪为单个空间。
Ex:

string Input = "Hello      Token1    Token2     Token3    World!  ";
string Output = Input.TrimSpacesInBetween();
//Output will be: "Hello Token1 Token2 Token3 World!"
我已经阅读了[事实上我正在阅读]框架设计指南,但这似乎让我感到困扰

我想有一些选择

TrimIntermediate();  
TrimInbetween();
以下是请求时的代码: 它是递归的

public static class StringExtensions
{
    public static string Collapse(this string str)
    {
        return str.Collapse(' ');
    }

    public static string Collapse(this string str, char delimeter)
    {
        char[] delimeterts = new char[1];
        delimeterts[0] = delimeter;
        str = str.Trim(delimeterts);

        int indexOfFirstDelimeter = str.IndexOf(delimeter);
        int indexTracker = indexOfFirstDelimeter + 1;

        while (str[indexTracker] == delimeter)
            indexTracker++;

        str = str.Remove(indexOfFirstDelimeter + 1, indexTracker - indexOfFirstDelimeter - 1);
        string prevStr = str.Substring(0, indexOfFirstDelimeter + 1);
        string nextPart = str.Substring(indexOfFirstDelimeter + 1);

        if (indexOfFirstDelimeter != -1)
            nextPart = str.Substring(indexOfFirstDelimeter + 1).Collapse(delimeter);

        string retStr = prevStr + nextPart;

        return retStr;
    }
}

那么
折叠空间呢?

折叠空间只适用于空格,但是为了允许重载,你可能需要
CollapseDelimiters
CollapseWhitespace
,如果它真的只是用于各种空格字符。

在ruby中,我相信他们称之为CollapseExtraWhitespace

NormalizeWhitespace? 这种方式更清楚地表明,在处理后将留下一个可用值。
正如其他人之前所说,“Collapse”听起来有点严格,甚至可能意味着它可以返回一个空字符串。

不是真正的答案,更多的是对您发布的代码的评论

通过使用正则表达式,可以使该方法变得更短,更易于理解。(我的猜测是,它的性能也可能比递归字符串操作更好,但您需要进行基准测试才能确定。)


试试这个,它对我来说很有效,似乎比递归解决方案简单得多

public static class StringExtensions
{
    public static string NormalizeWhitespace(this string input, char delim)
    {
        return System.Text.RegularExpressions.Regex.Replace(input.Trim(delim), "["+delim+"]{2,}", delim.ToString());
    }
}
可以这样称呼它:

Console.WriteLine(input.NormalizeWhitespace(' '));

当然了

makeCompact怎么样?

折叠什么?这对我来说似乎很模糊,理想情况下,开发人员不需要阅读文档就能找到答案……确切地说,我希望开发人员能够直观地将方法名称与功能联系起来。Collapse可能和Trim一样工作。在.Net中,Trim指的是删除空白,这可能是赞成Trim[xxx]()的一个论点。实际上我收回这一点,因为Trim删除了空白,所以当我看到Trim时,这个要求是将计数减少到1,我会自然而然地想到从开头或结尾删除某些内容,而不是从中间删除。对我来说,崩溃听起来像是“从N中取1”。无论如何,我想这是一个品味的问题,你可能是对的。“崩溃”是小的,直观的,相对的,并且对于前端开发人员来说有更好的回忆因素。我将使用“collapse”来包含重载的直观参考。我接受你的回答,作为对“崩溃”想法的感谢票。我会努力学习我的英语词汇,想出我自己的名字谢谢,谢谢。这是我迄今为止最成功的答案:在短短30分钟内被接受并成为第三多投票人!:-)顺便问一下,我很好奇,你能把你的方法的代码贴出来吗?很多年前,我开发了一个具有相同目的的,但我像“将两个连续的空格替换为一个空格,而字符串包含两个连续的空格”一样,我认为这不是最有效的方法。你明白了。我觉得这可能是一个很好的使用Regex.Replace的场景。查找长度大于1的任意连续空格组,并将其替换为单个空格。当然,您可以从裁剪输入开始,这将消除任何空格前置或后缀。这段代码是作为递归解决这一问题的挑战的一部分编写的。@quentious_geek我认为这个堆栈交换可能会引起您的兴趣。如果是,请显示您的支持并帮助它进入测试版!:)
Console.WriteLine(input.NormalizeWhitespace(' '));