をNULLABLEするタイプを変更することはできません一般的なコンバータは、私はここで、一般的なコンバータ</p> <p>を作成しています一般的な方法で
bool TryReaderParse<TType>(object data, out TType value)
{
value = default(TType);
Type returnType = typeof(TType);
object tmpValue = null;
if (returnType == typeof(DateTime))
{
tmpValue = StringToDatetime(data.ToString());
}
else if (returnType == typeof(DateTime?)) // THIS IF FIRES
{
tmpValue = StringToNullableDatetime(data.ToString());
}
value = (TType)Convert.ChangeType(tmpValue, returnType); // THROWS
}
public DateTime? StringToNullableDatetime(string date)
{
DateTime? datetime = null;
if (!string.IsNullOrEmpty(date))
{
datetime = DateTime.Parse(date, new CultureInfo(Resources.CurrentCulture));
}
return datetime;
}
のサンプルコードであり、これは、私はそれを使用する方法です:
void foo()
{
DateTime? date = null;
TryReaderParse<DateTime?>("25/12/2012", out date);
}
スローされた例外は、DateTime
からNullable<DateTime>
に変換できないことを示します。このメソッドはnullable型を作成して返しますので、どのようにキャストに失敗しますか?
最後に、この特定の例では、null可能なDateTimeが必要です。
編集問題はStringToNullableDatetime
方法はDatetime?
を返し、鋳造がConvert.ChangeType
が合格したことを見ることができない可能性、それをどのように、StringToNullableDatetime
方法がNULL可能日時を返すので、それがDatetime
から変換できないと言うことです引数はnull可能ですか?
ps。私は逆の(nullableからのキャスト)を行うthisのような答えを読んだ。 documentationから
より
は私の質問を編集しました。私の問題は、Nullableのdatetimeを返すことができないことです。 'Convert.ChangeType'行は、渡された引数がNULL可能であることを見ることができません – Odys