J'ai la méthode suivante avec un type générique:
T GetValue<T>();
Je voudrais limiter T aux types primitifs tels que int, string, float mais pas le type class. Je sais que je peux définir un générique pour le type de classe comme ceci:
C GetObject<C>() where C: class;
Je ne sais pas si c'est possible pour les types primitifs et comment.
Vous pouvez l'utiliser pour le limiter aux types de valeur:
where C: struct
Vous mentionnez également la chaîne. Malheureusement, les chaînes ne seront pas autorisées car ce ne sont pas des types de valeur.
En fait, cela fait le travail dans une certaine mesure:
public T Object<T>() where T :
struct, IComparable, IFormattable, IConvertible, IComparable<T>, IEquatable<T>
Pour limiter aux types numériques, vous pouvez obtenir des conseils utiles sur les exemples suivants définis pour la classe ValueType
Voici ce que vous recherchez:
T GetObject<T>() where T : struct;
Il n'y a aucune contrainte générique qui correspond à cet ensemble de choses proprement. Qu'est-ce que tu veux vraiment faire? Par exemple, vous pouvez le pirater avec des vérifications d'exécution, comme un ctor statique (pour les types génériques - pas si facile pour les méthodes génériques) ...
Pourtant; la plupart du temps, je vois cela, c'est parce que les gens veulent:
EqualityComparer<T>.Default
Comparer<T>.Default
Qu'essayez-vous réellement de faire dans la méthode? Il se peut que vous ayez réellement besoin de C pour implémenter IComparable, ou une autre interface. Dans ce cas, vous voulez quelque chose comme
T GetObject<T> where T: IComparable