Maison > développement back-end > C++ > Comment puis-je renvoyer Null en toute sécurité à partir d'une méthode générique C# avec un paramètre de type T ?

Comment puis-je renvoyer Null en toute sécurité à partir d'une méthode générique C# avec un paramètre de type T ?

Susan Sarandon
Libérer: 2025-01-09 17:26:43
original
766 Les gens l'ont consulté

How Can I Safely Return Null from a C# Generic Method with a Type Parameter T?

Renvoi de la valeur Null à partir d'une méthode générique en C#

Dans les méthodes génériques C#, il n'est pas toujours simple de renvoyer null lorsque le paramètre type peut être un type référence ou un type valeur. Ce problème se produit lorsque le type de retour est un paramètre de type T.

Considérez l'extrait de code suivant :

<code class="language-csharp">static T FindThing<T>(IList collection, int id) where T : IThing, new()
{
    foreach (T thing in collection)
    {
        if (thing.Id == id)
            return thing;
    }
    return null;  // 错误:无法将 null 转换为类型参数“T”,因为它可能是值类型。请考虑改用“default(T)”代替。
}</code>
Copier après la connexion

Ce code tente de renvoyer null si un élément correspondant n'est pas trouvé dans la collection, mais qu'une erreur de construction se produit. Le message d'erreur indique que null ne peut pas être converti en paramètre de type T car T peut être un type valeur.

Il existe trois façons de résoudre ce problème :

  1. Renvoyer une valeur par défaut : Vous pouvez utiliser default(T) pour renvoyer une valeur par défaut de type T. Cela renvoie null pour les types référence et la valeur par défaut appropriée pour les types valeur, par exemple 0 pour int et ' pour char. '.

  2. Restreindre T à un type référence : Si vous savez que T ne peut être qu'un type référence, vous pouvez ajouter la contrainte where T : class à la déclaration de la méthode. Cela vous permettra de renvoyer null comme d'habitude.

  3. Restreindre T à un type de valeur non nul : Si vous savez que T sera un type de valeur non nul, vous pouvez ajouter une contrainte where T : struct et renvoyer null comme d'habitude. Notez que cela renvoie une valeur nulle d'un type de valeur nullable, pas une 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