Ich versuche, meine LINQ aufzufrischen, indem ich einige einfache Erweiterungsmethoden schreibe. Gibt es eine bessere Möglichkeit, eine solche Funktion wie unten zu schreiben, die eine bestimmte Liste von Zeichen aus einer Zeichenfolge (mit LINQ) entfernt?
Es hilft mir, zuerst an die Erweiterungsmethoden zu denken, auf die sich LINQ stützt:
public static string Remove(this string s, IEnumerable<char> chars)
{
string removeChars = string.Concat(chars);
return new string(s.ToCharArray().Where(c => !removeChars.Contains(c)).ToArray());
}
Aber das ist ziemlich hässlich. Ergo LINQ.
Der Unterschied, den ich in der LINQ-Anweisung bemerke, ist, dass ich "select" verwenden muss, während ich das bei der Erweiterungsmethode nicht muss.
/// <summary>Strip characters out of a string.</summary>
/// <param name="chars">The characters to remove.</param>
public static string Remove(this string s, IEnumerable<char> chars)
{
string removeChars = string.Concat(chars);
var stripped = from c in s.ToCharArray()
where !removeChars.Contains(c)
select c;
return new string(stripped.ToArray());
}
Also ich frage mich, wenn dies (letzte Schnipsel oben) ist die kürzeste LINQ-Anweisung zum Entfernen von Zeichen zu erreichen.