Exploiter la réflexion pour identifier les types de référence nullables dans .NET
C# 8.0 et les versions ultérieures ont introduit des types de référence nullables, une amélioration significative pour la sécurité du code. Ces types définissent explicitement si une propriété peut contenir une valeur nulle, réduisant ainsi le risque d'exceptions de référence nulle.
Considérez cet exemple :
<code class="language-csharp">public class Foo { public string? Bar { get; set; } }</code>
Le suffixe ?
désigne Bar
comme type de référence nullable. La réflexion .NET fournit des mécanismes pour déterminer si une propriété de classe utilise un type de référence nullable.
Méthode 1 : Utilisation de NullabilityInfoContext
(.NET 6 et versions ultérieures)
.NET 6 a introduit les NullabilityInfoContext
API, offrant une approche simplifiée de la détection de types nullables. C'est la méthode recommandée.
<code class="language-csharp">public static bool IsNullable(Type type) { var context = type.GetNullabilityInfoContext(); return context.ReadNullableAnnotation(type, out var annotation) && annotation == NullabilityState.Nullable; }</code>
Méthode 2 : Inspection manuelle des attributs (pré-.NET 6)
Avant .NET 6, des vérifications manuelles des attributs étaient nécessaires. Ces fonctions d'assistance facilitent cela :
<code class="language-csharp">public static bool IsNullable(PropertyInfo property) => IsNullableHelper(property.PropertyType, property.DeclaringType, property.CustomAttributes); public static bool IsNullable(FieldInfo field) => IsNullableHelper(field.FieldType, field.DeclaringType, field.CustomAttributes); public static bool IsNullable(ParameterInfo parameter) => IsNullableHelper(parameter.ParameterType, parameter.Member, parameter.CustomAttributes);</code>
La fonction IsNullableHelper
examine ces attributs :
System.Runtime.CompilerServices.NullableAttribute
(Indique une propriété nullable)System.Runtime.CompilerServices.NullableContextAttribute
(Indique le type englobant nullable)Interprétation de la valeur d'octet :
Les deux attributs utilisent une valeur d'octet pour la nullité :
Conclusion :
Reflection permet aux développeurs d'identifier les types de référence nullables dans les propriétés de classe. Cette fonctionnalité est vitale pour maintenir la sécurité des types et empêcher les exceptions de référence nulle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!