Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
C# 10 bietet unterstützung für eine bessere Zeichenfolgeninterpolation, einschließlich der Möglichkeit, benutzerdefinierte "Handler" zusätzlich zu Zeichenfolgen als Ziel zu verwenden. StringBuilder nutzt dies durch neue Überladungen von Append und AppendLine, die einen benutzerdefinierten interpolierten Zeichenfolgenhandler akzeptieren. Vorhandene Aufrufe dieser Methoden können jetzt mit der Bindung an die neuen Überladungen beginnen. Im Allgemeinen ist das Verhalten identisch, aber mit verbesserter Leistung. Anstatt beispielsweise zuerst eine Zeichenfolge zu erstellen und dann anzufügen, werden die einzelnen Komponenten der interpolierten Zeichenfolge direkt an den Generator angefügt. Dies kann jedoch die Auswertungsreihenfolge von Objekten ändern, die als Formatelemente verwendet werden, was sich als Verhaltensunterschied manifestieren kann.
Vorheriges Verhalten
In früheren Versionen ein Aufruf von:
stringBuilder.Append($"{a} {b}");
kompiliert auf das Äquivalent von:
stringBuilder.Append(string.Format("{0} {1}", a, b));
Dies bedeutet, dass zunächst a ausgewertet wird, dann b ausgewertet wird, anschließend wird eine Zeichenfolge aus den Ergebnissen dieser Auswertungen erstellt, und schließlich wird diese Zeichenfolge an den Builder angefügt.
Neues Verhalten
Ab .NET 6 ein Aufruf von:
stringBuilder.Append($"{a} {b}");
kompiliert auf das Äquivalent von:
var handler = new StringBuilder.AppendInterpolatedStringHandler(1, 2, stringBuilder);
handler.AppendFormatted(a);
handler.AppendLiteral(" ");
handler.AppendFormatted(b);
stringBuilder.Append(ref handler);
Dies bedeutet, dass a ausgewertet und dem Builder angefügt wird, und dann b ausgewertet und dem Builder angefügt wird.
Wenn beispielsweise entweder a oder b selbst der Builder ist, wie im folgenden Code gezeigt, kann die neue Auswertungsreihenfolge zu einem anderen Verhalten zur Laufzeit führen.
stringBuilder.Append($"{a} {stringBuilder}");
Eingeführte Version
6.0 RC 1
Art der einschneidenden Änderung
Diese Änderung kann sich auf die Quellkompatibilität auswirken.
Grund für Änderung
Es ist üblich, dass Entwickler interpolierte Zeichenfolgen StringBuilderan übergeben, da es praktischer ist, als die Zeichenfolge manuell aufzuteilen und für jeden Teil aufzurufen StringBuilder.Append . Diese neuen Überladungen ermöglichen die präzise Syntax und den größten Teil der Leistung der einzelnen Aufrufe.
Empfohlene Aktion
In den meisten Fällen, in denen StringBuilder.Append und StringBuilder.AppendLine verwendet werden, werden Sie keinen funktionalen Unterschied feststellen. Wenn Ihnen ein problematischer Unterschied auffällt, können Sie das frühere Verhalten wiederherstellen, indem Sie eine Umwandlung in (string) vor die interpolierte Zeichenfolge einfügen. Beispiel:
stringBuilder.Append((string)$"{a} {b}")
Dies wird jedoch nicht empfohlen, es sei denn, sie ist tatsächlich aus Kompatibilitätsgründen erforderlich.