Maison >développement back-end >C++ >Les génériques C # peuvent-ils limiter les arguments de type à des types entiers spécifiques?
Lorsque vous utilisez des génériques en C #, y a-t-il une contrainte qui peut limiter le paramètre de type T uniquement le type de valeurs suivant: int16, int32, int64, uint16, uint32 et uint64?
Réponse
Dans .NET 7, une interface spécialement utilisée pour limiter T aux types numériques:
dans l'espace de nom. Pour accepter uniquement le type entier, vous pouvez utiliser. System.Numerics
INumber<T>
Compte tenu de l'implémentation de méthode suivante : IBinaryInteger<T>
Comment utiliser des exemples: IntegerFunction
<code class="language-csharp">static bool IntegerFunction<T>(T value) where T : IBinaryInteger<T> { return value > T.Zero; }</code>arrière-plan historique
<code class="language-csharp">Console.WriteLine(IntegerFunction(5)); // True Console.WriteLine(IntegerFunction((sbyte)-5)); // False Console.WriteLine(IntegerFunction((ulong)5)); // True</code>Avant .net 7, C # n'a pas fourni de telles contraintes. Comme l'a expliqué Anders Hejlsberg, la raison est d'éviter la complexité inutile et les avantages réels sont limités.
Pour les scènes qui ne sont pas disponibles directement pour prendre en charge les contraintes, il est recommandé d'utiliser des méthodes alternatives, telles que des modèles ou des stratégies d'usine.
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!