の配列から文字を置き換えるためにLINQラムダを使用する:私は許可されていない文字を含む文字列配列持つ文字列
:私はこのようなforeachので次々と文字を削除することができpublic static string[] IllegalCharacters = { "\"", "/", "\\", "[", "]", ":", "|", "<", ">", "+", "=", ";", ",", "?", "*", "\'", "@", ".", ":", "^", "¨", "å", "ä", "ö", "Å", "Ä", "Ö" };
を
private string RemoveIllegalCharactersFromString(string text)
{
foreach (string illegalCharacter in IllegalCharacters.IllegalCharacters)
{
text = text.Replace(illegalCharacter, "");
}
return text;
}
私の質問は、代わりにlinqラムダ式を使用してメソッドを削除できますか?私が今使っている何
は:
public static HashSet<char> IllegalCharacters = new HashSet<char>(new char[] { '\"', '/', '\\', '[', ']', ':', '|', '<', '>', '+', '=', ';', ',', '?', '*', '\'', '@', '.', ':', '^', '¨','\'' });
var t = sourceText.Where(c => !IllegalCharacters.Contains(c)).ToArray();
var result = new string(t);
return result;
、次のようなループの中で 'StringBuilder.Replace'を使用して簡単にそれを改善することができ[ここ](http://stackoverflow.com/a/25154888/284240)。 –
StringBuilderを使用するのがなぜ「高速」であるかについての情報を提供してもらえますか? –
「より速い」とは言わずより効率的です。それは、より少ないメモリを使用するか、ガベージコレクタが蹴られるのを防ぐかもしれません。だから、 'StringBuilder.Replace' [効率的にすることができます](http://stackoverflow.com/a/6524918/284240).Btw、部分文字列を削除するcharsの代わりにLINQのアプローチはもう働きません。 –