que tienen el código abajo y que había necesidad de convertir una cadena a un tipo que también se especifica a partir de la secuencia:Cómo convertir una cadena a un tipo anulable que se determina en tiempo de ejecución?
Type t = Type.GetType("System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]");
object d = Convert.ChangeType("2012-02-23 10:00:00", t);
me sale el mensaje de error a continuación:
Invalid cast from 'System.String' to 'System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'.
¿Cómo sería ese ser agradablemente posible?
sé una manera fea sería comprobar si el tipo es anulable si usando:
Type possiblyNullableType = Type.GetType("System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]");
var underlyingType = Nullable.GetUnderlyingType(possiblyNullableType);
Object result;
// if it's null, it means it wasn't nullable
if (underlyingType != null)
{
result = Convert.ChangeType("2012-02-23 10:00:00", underlyingType);
}
Habría alguna manera mejor?
Gracias,
¿Por qué debería verificar t.IsGenericType? la parte t.GetGenericTypeDefinition() == typeof (Nullable <>) cubriría eso; ¿no? –
@William 'GetGenericTypeDefinition()' arroja una excepción si el tipo no es genérico. – hvd