Ho il codice qui sotto e avevo bisogno di convertire una stringa in un tipo che è anche specificato da Stringa:Come convertire una stringa in un tipo Nullable Che è determinato in fase di esecuzione?
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);
ottengo il messaggio di errore di seguito:
Invalid cast from 'System.String' to 'System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'.
Come sarebbe che essere gentilmente possibile?
So che un brutto modo sarebbe quello di verificare se il tipo è annullabile con se:
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);
}
Ci sarebbe un modo migliore?
Grazie,
Perché dovresti controllare t.IsGenericType? la parte t.GetGenericTypeDefinition() == typeof (Nullable <>) lo coprirebbe; non lo sarebbe? –
@William 'GetGenericTypeDefinition()' genera un'eccezione se il tipo non è generico. – hvd