这有什么原因吗?我问这个问题是因为如果你需要使用大量的空字符,那么你就会陷入与你使用大量空字符串时相同的情况。

编辑:这种用法的原因是:

myString.Replace ('c', '')

所以从myString中移除所有的'c'实例。


当前回答

如果你想删除满足特定条件的字符,你可以使用这个:

string s = "SoMEthInG";
s = new string(s.Where(c => char.IsUpper(c)).ToArray());

(这将在字符串中只留下大写字符。)

换句话说,您可以“使用”字符串作为IEnumerable<char>,对其进行更改,然后将其转换回如上所示的字符串。

同样,这不仅允许因为lambda表达式而删除特定的字符,尽管如果您像这样更改lambda表达式可以这样做:c => c != 't'。

其他回答

使用Char。MinValue,它的工作原理与“\0”相同。但要注意它与String.Empty不同。

如果你不需要整个字符串,你可以利用延迟执行:

public static class StringExtensions
{
    public static IEnumerable<char> RemoveChar(this IEnumerable<char> originalString, char removingChar)
    {
        return originalString.Where(@char => @char != removingChar);
    }
}

你甚至可以组合多个字符……

string veryLongText = "abcdefghijk...";

IEnumerable<char> firstFiveCharsWithoutCsAndDs = veryLongText
            .RemoveChar('c')
            .RemoveChar('d')
            .Take(5);

... 并且只计算前7个字符:)

编辑:或者更好:

public static class StringExtensions
{
    public static IEnumerable<char> RemoveChars(this IEnumerable<char> originalString,
        params char[] removingChars)
    {
        return originalString.Except(removingChars);
    }
}

及其用法:

        var veryLongText = "abcdefghijk...";
        IEnumerable<char> firstFiveCharsWithoutCsAndDs = veryLongText
            .RemoveChars('c', 'd')
            .Take(5)
            .ToArray(); //to prevent multiple execution of "RemoveChars"

如果你想删除满足特定条件的字符,你可以使用这个:

string s = "SoMEthInG";
s = new string(s.Where(c => char.IsUpper(c)).ToArray());

(这将在字符串中只留下大写字符。)

换句话说,您可以“使用”字符串作为IEnumerable<char>,对其进行更改,然后将其转换回如上所示的字符串。

同样,这不仅允许因为lambda表达式而删除特定的字符,尽管如果您像这样更改lambda表达式可以这样做:c => c != 't'。

如果你查看文档替换(字符串,字符串)重载字符串。替换您可以在备注部分中看到,如果第二个参数为空,则它将删除您指定的所有实例。因此,如果你使用myString = myString。替换(“c”,零);它会删除字符串中的每一个c。

使用

myString.Replace ("c", "")