0 Tage Serie
csharp / expert
Snippet

Defensive Programmierung mittels compiler-injizierter Metadaten

Compiler-Attribute wie CallerMemberName und CallerFilePath ermöglichen es dem C#-Compiler, automatisch Metadaten in Methodenaufrufe einzufügen. Dies ist essenziell für fortgeschrittene Fehlerbehandlung und Tests, da es präzisen Kontext für Fehler in Produktionslogs liefert, ohne die Performance-Kosten einer vollständigen Stack-Trace-Erfassung.

snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System.Runtime.CompilerServices;
public class Validator
{
public static void AssertNotNull(object val,
[CallerMemberName] string member = "",
[CallerFilePath] string file = "",
[CallerLineNumber] int line = 0)
{
if (val == null)
{
throw new ArgumentNullException($"Null detected in {member} at {file}:{line}");
}
}
}
Erklärung
1
[CallerMemberName] string member = ""
Weist den Compiler an, den Namen der Methode oder Eigenschaft bereitzustellen, die diese Assertion aufgerufen hat.
2
throw new ArgumentNullException($"Null detected in {member} at {file}:{line}");
Erzeugt eine aussagekräftige Fehlermeldung unter Verwendung der injizierten Compile-Zeit-Metadaten.