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>
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 :
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. '.
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.
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!