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中,我相信他们称之为CollapseExtraWhitespaceNormalizeWhitespace?
这种方式更清楚地表明,在处理后将留下一个可用值。
正如其他人之前所说,“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(' '));