Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# 是否可以为string.Trim()添加字符(而不是替换默认值)?_C#_.net_Trim - Fatal编程技术网

C# 是否可以为string.Trim()添加字符(而不是替换默认值)?

C# 是否可以为string.Trim()添加字符(而不是替换默认值)?,c#,.net,trim,C#,.net,Trim,我想按默认的空白字符和其他字符进行修剪。我是这样做的: string MyTrim(string source) { char[] badChars = { '!', '?', '#' }; var result = source.Trim().Trim(badChars); return result == source ? result : MyTrim(result); } 对我来说,它看起来很愚蠢,因为它的迭代次数比它需要的要

我想按默认的空白字符和其他字符进行修剪。我是这样做的:

string MyTrim(string source)
{
    char[] badChars = { '!', '?', '#' };
    var result = source.Trim().Trim(badChars);
    return result == source
         ? result
         : MyTrim(result);
}

对我来说,它看起来很愚蠢,因为它的迭代次数比它需要的要多。是否可以为string.Trim()添加字符(而不是替换默认值)?或者在哪里可以找到默认情况下在string.Trim()中使用的“默认空白字符”数组?这听起来很简单,但我找不到。

无法更改
Trim
的默认行为

但是,如果必须,您可以创建一个包含所有要修剪的字符的数组,以便将调用减少到仅一个调用,但它是这样的:

var badChars =
    (from codepoint in Enumerable.Range(0, 65536)
     let ch = (char)codepoint
     where char.IsWhiteSpace(ch)
           || ch == '!' || ch == '?' || ch == '#'
     select ch).ToArray();
这将给您一个调用
Trim

var result = source.Trim(badChars);
理想情况下,您可以将
坏蛋
存储在某个地方,这样您就不必一直构建它


现在,这会比两个电话快吗?我不知道,但如果有必要,我会测量它。

不可能直接添加其他字符

但是,已定义空白字符列表,您可以从提供的所有枚举创建静态帮助器列表


除非您正在解析大量字符串,否则可能不值得在字符串上保存第二次传递。

。另请参见@CodeCaster,我认为您没有抓住要点,OP希望避免使用多个
Trim
调用。@Habib我回答的是“在哪里可以找到“默认空白字符”数组?”为什么要递归调用
MyTrim
?看起来你在担心额外的
Trim
调用,但是你自己的代码会让事情变得更糟。你可以使用两个正则表达式:
“@\A[\s!#?]*”
作为开始,而
@“[\s!#?]*\Z”
作为结束,OP可以迭代输入字符串
源代码
来查找空白字符,然后删除它们,而不是0到65536。虽然性能差异可以忽略不计,但对于过早优化的额外警告是值得欢迎的。虽然
Trim().Trim(additionalChars)
可能会“循环愚蠢”(OP的话),但在某些代码库中查找此代码会显得更愚蠢,并且肯定会使“每分钟wtfs”飙升。除非你每秒修剪数千个字符串,否则你不会注意到差异,在这种情况下可读性更重要。啊,问题中的代码是递归的,好吗。然后我不太确定我会推荐什么。@LasseV.Karlsen这不仅仅是两个电话,例如“a!!!!!!!”-15。这并不是真正的性能问题,只是试图为@CodeCaster抱歉,…寻找简单的.Net可能性,以便在没有新逻辑实现的情况下使用附加字符进行调用修剪。