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?
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?
¿Existe la función typeof(T)
?
entonces si (typeof (T) == Type.GetType ("String")) ??? –
if (typeof (T) == typeof (String)) debería ser más rápido – helium
Puede usar la función typeof(T)
?
Así que para comprobar la cuerda, hacer
if(typeof(T) == typeof(string))
// hacer algo
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
.
Lo necesito para depuración. –
Puede usarlo para determinar si el parámetro de tipo es un tipo de valor como typeof (T) .IsValueType. – LoBo
@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. –
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.
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