restreindre les génériques .NET aux types numériques
Les génériques .NET offrent une flexibilité de type, mais nécessitent souvent des contraintes de type. Un besoin fréquent consiste à limiter les arguments de type générique aux types numériques comme Int16
, Int32
, Int64
, UInt16
, UInt32
, et UInt64
.
La solution avec .net 7
Alors que les versions antérieures manquaient d'une solution directe, .NET 7 introduit INumber<T>
(dans System.Numerics
) comme l'interface la plus complète pour tous les types numériques. Pour les types entiers spécifiquement, IBinaryInteger<T>
est disponible.
Exemple de code: fonction entier
Cet exemple démontre un IntegerFunction
en utilisant IBinaryInteger<T>
:
static bool IntegerFunction<T>(T value) where T : IBinaryInteger<T> { return value > T.Zero; }
Utilisation:
Console.WriteLine(IntegerFunction(5)); // True Console.WriteLine(IntegerFunction((sbyte)-5)); // False Console.WriteLine(IntegerFunction((ulong)5)); // True
pré-.net 7 approches
Avant .net 7, la réalisation de cette contrainte était plus difficile. Des méthodes comme l'utilisation d'un modèle d'usine avec une classe Calculator<T>
ont été suggérées, mais celles-ci ont entraîné un code moins élégant et moins extensible.
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!