usando una tipos tipo ser referencia poo parametros parametrizada objeto genericos generico generica debe cuando crear clase c# .net generics type-constraints

c# - una - tipos de genericos



¿Cómo se define el límite de tipo genérico para los tipos primitivos? (5)

¿Qué estás tratando de hacer en el método? Podría ser que realmente necesites C para implementar IComparable o alguna otra interfaz. En cuyo caso quieres algo como

T GetObject<T> where T: IComparable

Tengo el siguiente método con tipo genérico:

T GetValue<T>();

Me gustaría limitar T a tipos primitivos como int, string, float pero no tipo de clase. Sé que puedo definir genérico para el tipo de clase como este:

C GetObject<C>() where C: class;

No estoy seguro de si es posible para los tipos primitivos y cómo hacerlo.


En realidad, esto hace el trabajo hasta cierto punto:

public T Object<T>() where T : struct, IComparable, IFormattable, IConvertible, IComparable<T>, IEquatable<T>

Para limitar a los tipos numéricos, puede obtener algunos consejos útiles de los siguientes ejemplos definidos para la clase ValueType


Esto es lo que estás buscando:

T GetObject<T>() where T : struct;


No hay una restricción genérica que coincida con ese conjunto de cosas limpiamente. ¿Qué es lo que realmente quieres hacer? Por ejemplo, puede hackearlo con verificaciones en tiempo de ejecución, como un ctor estático (para tipos genéricos, no tan fácil para los métodos genéricos) ...

Sin embargo; la mayoría de las veces que veo esto, es porque la gente quiere uno de los siguientes:

  • para poder verificar ítems por igualdad: en cuyo caso use EqualityComparer<T>.Default
  • para poder comparar / ordenar elementos: en cuyo caso use Comparer<T>.Default
  • para poder realizar aritmética: en ese caso, use el soporte de MiscUtil para operadores genéricos

Puede usar esto para limitarlo a tipos de valores:

where C: struct

También mencionas cadena. Desafortunadamente, no se permitirán cadenas porque no son tipos de valores.