tôi đang tạo ra một chuyển đổi chungKhông thể thay đổi loại để nullable trong phương pháp chung
Dưới đây là một số mẫu mã của bộ chuyển đổi chung
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;
}
Và đây là cách tôi sử dụng nó:
void foo()
{
DateTime? date = null;
TryReaderParse<DateTime?>("25/12/2012", out date);
}
Ngoại lệ được ném cho biết rằng nó không thể chuyển đổi từ DateTime
thành Nullable<DateTime>
. Kể từ khi, phương thức tạo và trả về một kiểu nullable, làm thế nào việc đúc không thành công?
Cuối cùng, tôi muốn có DateTime không có giá trị, trong ví dụ cụ thể này.
chỉnh sửa Vấn đề là StringToNullableDatetime
phương thức trả về một Datetime?
và đúc nói rằng không thể chuyển đổi từ Datetime
Kể từ khi phương pháp StringToNullableDatetime
trả về một datetime nullable, làm thế nào là nó có thể rằng Convert.ChangeType
không thể thấy rằng thông qua đối số là nullable?
Ps. Tôi đã đọc các câu trả lời như this một câu trả lời ngược lại (đúc từ nullable).
sửa câu hỏi của tôi. Vấn đề của tôi là tôi không thể trả về một datetime Nullable. Dòng 'Convert.ChangeType' không thể thấy rằng đối số đã truyền là nullable – Odys