2010-03-01 10 views
7

considerar lo siguiente:Tipo de parámetro Tipo de

private T getValue<T>(String attr) 
{ ... } 

¿Cómo puedo comprobar para ver qué tipo es? no

if("" is T) // String 
if(1 is T) // Int32 

una mejor manera:

Estaba pensando?

+0

Esta pregunta es más útil que el 'duplicado' porque solo pregunta sobre una cosa, mientras que la otra pregunta tiene un equipaje adicional que afecta el contenido de las respuestas. – DCShannon

Respuesta

16

¿Existe la función typeof(T)?

+0

entonces si (typeof (T) == Type.GetType ("String")) ??? –

+9

if (typeof (T) == typeof (String)) debería ser más rápido – helium

5

Puede usar la función typeof(T)?

Así que para comprobar la cuerda, hacer

if(typeof(T) == typeof(string)) // hacer algo

5

Esto es casi seguro que una falla en el diseño de su función si es necesario para obtener el tipo del parámetro de tipo genérico; Esto es opuesto a de "genérico". Por lo tanto, use sobrecarga en su lugar.

Aparte de eso, Unsliced ​​ya ha dado la respuesta correcta para determinar el tipo de T.

+0

Lo necesito para depuración. –

+0

Puede usarlo para determinar si el parámetro de tipo es un tipo de valor como typeof (T) .IsValueType. – LoBo

+0

@LoBo Claro, pero eso * no * es lo que OP estaba pidiendo, y para la mayoría (pero no para todos) propósitos, usted usaría una restricción aquí en lugar de verificar el tiempo de ejecución. –

2

En realidad, hay 2 métodos que hacen que, si las clases esperados se derivan de la misma clase o interfaz o clase abstracta que puede hacer easly en la firma genérica

T GetValue() donde T: clase, esto obligará tipos enteros de T para ser tipos de referencia. O T GetValue() donde T: IDisposable, esto obligará a los Totipos completos a implementar IDisposable.

para su caso typeof (T) resolverá sus problemas, pero en este caso, haga que el método no sea genérico.

Cuestiones relacionadas