は、私は以下のコードを持っていると私はまた、文字列から指定された型に文字列を変換する必要があるだろう:実行時に決定されるNullable型に文字列を変換する方法は?
Invalid cast from 'System.String' to 'System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'.
どうだろう:
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);
は、私は以下のエラーメッセージが表示されますきれいに可能ですか?
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);
}
は、任意のより良い方法があるでしょう:
は、私は1つの醜い方法があれば使用してタイプがNULL可能であるかどうかをチェックすることです知っていますか?ありがとう、
なぜt.IsGenericTypeをチェックする必要がありますか? t.GetGenericTypeDefinition()== typeof(Nullable <>)部分はそれをカバーします。それじゃない? –
@William 'GetGenericTypeDefinition()'は、型がジェネリックでない場合に例外をスローします。 – hvd