Gibt es einen Grund dafür? Ich frage, denn wenn Sie viele leere Zeichen verwenden müssen, geraten Sie in die gleiche Situation wie wenn Sie viele leere Zeichenfolgen verwenden würden.
Bearbeiten: Der Grund für diese Verwendung war folgender:
myString.Replace ('c', '')
Entfernen Sie also alle Instanzen von 'c' aus myString.
RemoveAll(this string s, params char[] toRemove)
? Die Absicht wird klar kommuniziert und Sie riskieren nichts falsch zu tippen.""
erstellt ein Objekt : Nein, tut es nicht.Antworten:
Es gibt keinen leeren Saibling. Das nächstgelegene
'\0'
Zeichen ist das Unicode-Zeichen "null". Warum sollten Sie ein separates Feld dafür benötigen, da Sie dies in Zeichenfolgenliterale einbetten oder ganz einfach selbst ausdrücken können? Ebenso gelten die Argumente "Es ist leicht zu verwirren""
und" "
" nicht'\0'
.Wenn Sie ein Beispiel geben könnten, wo Sie es verwenden möchten und warum Sie denken, dass es besser wäre, könnte das helfen ...
quelle
Int32.Zero
gäbe, würden Sie das anstelle der wörtlichen 0 verwenden? Wenn nicht, was ist der Unterschied hier?Ein Zeichen ist im Gegensatz zu einer Zeichenfolge eine diskrete Sache mit einer festen Größe. Eine Zeichenfolge ist wirklich ein Container mit Zeichen.
Char.Empty macht in diesem Zusammenhang also keinen Sinn. Wenn Sie ein Zeichen haben, ist es nicht leer.
quelle
Es gibt keinen leeren Charakter. Es enthält immer etwas . Sogar '\ 0' ist ein Zeichen.
quelle
Verwenden Sie,
Char.MinValue
was genauso funktioniert wie '\ 0'. Aber sei vorsichtig, es ist nicht dasselbe wieString.Empty
.quelle
Sie könnten nullbare Zeichen verwenden.
quelle
Wenn Sie nicht die gesamte Zeichenfolge benötigen, können Sie die verzögerte Ausführung nutzen:
Sie können sogar mehrere Zeichen kombinieren ...
... und nur die ersten 7 Zeichen werden ausgewertet :)
EDIT: oder noch besser:
und seine Verwendung:
quelle
OK, dies ist nicht besonders elegant zum Entfernen von Buchstaben, da die .Replace-Methode eine Überladung aufweist, die Zeichenfolgenparameter akzeptiert. Dies funktioniert jedoch zum Entfernen von Wagenrückläufen, Zeilenvorschüben, Tabulatoren usw. In diesem Beispiel werden Tabulatorzeichen entfernt:
quelle
Aus dem gleichen Grund gibt es keine
int.Empty
. Container können leer sein. Skalarwerte können nicht sein. Wenn Sie 0 meinen (was nicht leer ist), dann verwenden Sie'\0'
. Wenn du meinstnull
, dann benutzenull
:)quelle
Ein Zeichen ist ein Werttyp, daher kann sein Wert nicht null sein. (Es sei denn, es ist in einen Nullable-Container verpackt).
Da es nicht null sein kann, enthält in einen numerischen Code und jeder Code ist einem Zeichen zugeordnet.
quelle
Keine Antwort auf Ihre Frage, aber um einen Standard zu kennzeichnen
char
, können Sie einfach verwendendas ist das gleiche wie
char.MinValue
das wiederum ist das gleiche wie\0
. Man sollte es jedoch nicht für so etwas wie eine leere Zeichenfolge verwenden.quelle
Beantwortet Ihre erste Frage nicht - aber für das spezifische Problem, das Sie hatten, können Sie einfach Zeichenfolgen anstelle von Zeichen verwenden, oder?:
Gibt es einen Grund, warum Sie das nicht wollen?
quelle
Sie können Ihre Zeichenfolge auch zeichenweise neu erstellen, mit Ausnahme der Zeichen, die Sie entfernen möchten.
Hier ist eine Erweiterungsmethode, um dies zu tun:
Es ist nicht schick oder schick, aber es funktioniert gut.
Verwenden Sie wie folgt:
quelle
StringBuilder
fürresult
. Warum nicht einwickelnreturn s.Replace(charsToRemove,"");
?Wenn Sie Zeichen entfernen möchten, die eine bestimmte Bedingung erfüllen, können Sie Folgendes verwenden:
(Dadurch bleiben nur die Großbuchstaben in der Zeichenfolge.)
Mit anderen Worten, Sie können die Zeichenfolge als "verwenden"
IEnumerable<char>
, Änderungen daran vornehmen und sie dann wie oben gezeigt wieder in eine Zeichenfolge konvertieren.Dies ermöglicht es wiederum, nicht nur ein bestimmtes Zeichen aufgrund des Lambda-Ausdrucks zu entfernen, sondern dies auch, wenn Sie den Lambda-Ausdruck folgendermaßen ändern :
c => c != 't'
.quelle
Wie wäre es mit BOM , dem magischen Charakter, den Microsoft zum Start von Dateien hinzufügt (zumindest XML)?
quelle
myString.Replace ('c', '')
durch erreicht werden könntemyString.Replace ('c', UTF_BOM)
. Dann würde ich sagen, die Antwort lautet "wie wäre es nicht mit ...".Wenn Sie das leere Zeichen in der Zeichenfolge entfernen möchten, funktioniert Folgendes: Konvertieren Sie es einfach in eine beliebige Datentypdarstellung. Vielen Dank,
quelle
In Bezug auf die C # -Sprache ist Folgendes möglicherweise nicht sehr sinnvoll. Und dies ist keine direkte Antwort auf die Frage. Aber Fowlloing ist das, was ich in einem meiner Geschäftsszenarien getan habe
Die
null
undwhite space
hatten unterschiedliche Geschäftsabläufe in meinem Projekt. Beim Einfügen in die Datenbank muss ichempty string
in die Datenbank einfügen , wenn es sich um Leerzeichen handelt.quelle
Ich weiß, dass dieser ziemlich alt ist, aber ich bin kürzlich auf ein Problem gestoßen, bei dem mehrere Ersetzungen vorgenommen werden mussten, um einen Dateinamen sicher zu machen. Erstens ist in der neuesten .NET-Zeichenfolge.Replace-Funktion null das Äquivalent zu einem leeren Zeichen. Was jedoch in .Net fehlt, ist ein einfaches Ersetzen aller Zeichen in einem Array durch das gewünschte Zeichen. Bitte verweisen Sie auf den folgenden Code (wird zum Testen in LinqPad ausgeführt).
quelle
verwenden
quelle
Der einfachste Weg, ein Zeichen pauschal aus der Zeichenfolge zu entfernen, besteht darin, es zuzuschneiden
cl = cl.Trim(' ');
Entfernt alle Leerzeichen in einer Zeichenfolge
quelle