Maison > développement back-end > C++ > Comment la réflexion peut-elle déterminer les types de référence nullables dans .NET ?

Comment la réflexion peut-elle déterminer les types de référence nullables dans .NET ?

Barbara Streisand
Libérer: 2025-01-18 10:26:10
original
238 Les gens l'ont consulté

How Can Reflection Determine Nullable Reference Types in .NET?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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é :

  • 0 : Non spécifié (Nullable par défaut)
  • 1 : Non nullable
  • 2 : Nullable

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal