Maison > développement back-end > C++ > Comment pouvons-nous différencier les types de valeur, les types de valeur nullable et les types de référence dans les contraintes génériques C# ?

Comment pouvons-nous différencier les types de valeur, les types de valeur nullable et les types de référence dans les contraintes génériques C# ?

Barbara Streisand
Libérer: 2024-12-29 07:04:14
original
471 Les gens l'ont consulté

How Can We Differentiate Value Types, Nullable Value Types, and Reference Types in C# Generic Constraints?

Différencier les types de valeur des types de référence dans les contraintes génériques

Lorsqu'il s'agit de types génériques, il est souvent nécessaire de faire la différence entre les types de valeur, les types de valeur nullables et les types de référence. Considérez le code suivant :

static void Foo<T>(T a) where T : struct { } // 1

static void Foo<T>(T? a) where T : struct { } // 2
Copier après la connexion

Ce code gère avec succès les types de valeur (1) et les types de valeur nullables (2). Cependant, tenter de détecter les types de référence (3) à l'aide de la contrainte suivante ne compile pas :

static void Foo<T>(T a) where T : class { } // 3
Copier après la connexion

Le message d'erreur indique qu'un membre avec la même signature existe déjà. Ce problème se pose car les contraintes ne font pas partie de la signature, contrairement aux paramètres. Pour résoudre cela, on peut placer la contrainte dans un paramètre :

class RequireStruct<T> where T : struct { }
class RequireClass<T> where T : class { }

static void Foo<T>(T a, RequireStruct<T> ignore = null) where T : struct { } // 1
static void Foo<T>(T? a) where T : struct { } // 2
static void Foo<T>(T a, RequireClass<T> ignore = null) where T : class { } // 3
Copier après la connexion

Cette approche permet de différencier les trois cas.

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