2009-04-30 13 views

Respuesta

42

Usted puede usar esto para limitarlo a los tipos de valor:

where C: struct 

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

+0

pero no para la cadena que es anulable –

+1

Y por supuesto que le permite pasar cualquier tipo de estructura definida por el usuario, no solo tipos primitivos No estoy seguro de que haya una manera, en realidad, distinta de definir sobrecargas para todos los tipos primitivos integrados. –

13

Esto es lo que está buscando:

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

Dang it! Odio cuando alguien me pega al golpe. ¡Bonito BFree! –

+0

¿qué hay de la cadena que es primitiva pero con nulable tipo –

+2

@David: cadena no es un tipo primitivo. Es un tipo de referencia que en algunos casos se trata como un tipo primitivo. – Samuel

5

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

T GetObject<T> where T: IComparable 
9

No existe 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 métodos genéricos) ...

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

  • para poder comprobar los elementos de la igualdad: en cuyo caso el uso EqualityComparer<T>.Default
  • para poder comparar los productos/ordenar: en cuyo caso se utilizará Comparer<T>.Default
  • para poder realizar operaciones aritméticas: en la que el apoyo MiscUtil caso de uso 's para generic operators
15

en realidad esto hace el trabajo a cierta extiende:

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

Para limitar a tipos numéricos puede obtener algunos consejos útiles de las siguientes muestras definidas para la clase ValueType

Cuestiones relacionadas