Mam poniższy kod, a ja potrzebuję przekonwertować ciąg do typu, który jest również określony z String:Jak przekonwertować ciąg na typ zerowy, który jest określony w czasie wykonywania?
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);
otrzymuję poniżej błędu wiadomość:
Invalid cast from 'System.String' to 'System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'.
Jak by to być ładnie możliwe?
Znam jeden brzydki sposób byłoby sprawdzić, czy typ jest pustych używając jeżeli:
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);
}
Czy istnieje lepszy sposób?
Dzięki,
Dlaczego konieczne jest sprawdzenie t.IsGenericType? część t.GetGenericTypeDefinition() == typeof (Nullable <>) pokryłaby to; prawda? –
@William 'GetGenericTypeDefinition()' zgłasza wyjątek, jeśli typ nie jest generyczny. – hvd