csharp / expert
Snippet
Benutzerdefinierte Interpolated String Handler für Performance
Interpolated String Handler (C# 10) ermöglichen es, die Verarbeitung von interpolierten Strings selbst zu steuern. Durch einen 'out bool enabled'-Parameter im Konstruktor kann die Evaluierung des Strings und seiner Argumente (wie teure Methodenaufrufe) komplett übersprungen werden, wenn eine Bedingung – etwa ein Log-Level-Check – nicht erfüllt ist, was unnötige Allokationen verhindert.
snippet.csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
[InterpolatedStringHandler]public struct LogHandler {public LogHandler(int literalLength, int holeCount, Logger log, out bool enabled) {enabled = log.IsEnabled;}public void AppendLiteral(string s) => Console.Write(s);public void AppendFormatted<T>(T value) => Console.Write(value);}public void Log(LogHandler handler) { }// Usagelogger.Log($"Data: {expensiveOperation()}"); // expensiveOperation is NOT called if logger is disabled
Erklärung
1
[InterpolatedStringHandler]
Markiert das Struct als gültigen Handler für die Konvertierung interpolierter Strings.
2
out bool enabled
Wenn auf false gesetzt, überspringt der Compiler den Aufruf der Append-Methoden und die Evaluierung der Ausdrücke.
3
AppendFormatted<T>(T value)
Wird vom Compiler für jeden Ausdruck (die 'Holes') innerhalb des interpolierten Strings aufgerufen.