Я пытаюсь определить разницу между DateTime и DateTime? используя отражение. Пожалуйста, ознакомьтесь со следующим кодом:C# Определить разницу между DateTime и DateTime? (Nullable)
public class TestClass
{
public DateTime testDate1 { get; set; }
public DateTime? testDate2 { get; set; }
}
public void Test()
{
TestClass testing = new TestClass();
var props = typeof(TestClass).GetProperties();
foreach (PropertyInfo p in props)
{
object o = p.GetValue(testing);
if (typeof(DateTime?).IsInstanceOfType(o))
{
o = DateTime.Now;
}
if (typeof(DateTime).IsInstanceOfType(o))
{
if (((DateTime)o) == DateTime.MinValue)
{
o = null;
}
}
Console.WriteLine(string.Format("{0} = {1}", p.Name, (o ?? "NULL").ToString()));
}
}
Результат этого кода противоположный тому, что я ожидал бы. В настоящее время выход:
testDate1 = 26/01/2016 16:15:00
testDate2 = NULL
Я ожидаю testDate1 утратившими testDate2 содержать значение.
При отладке этого кода кажется, что первый проход, использующий testDate1, передает оба оператора typeof if, а второй - оба оператора if. Может ли кто-нибудь помочь мне понять и, надеюсь, попробовать и уловить конкретный экземпляр с нулевым значением даты времени?
Чтобы отметить, что я также попытался перейти к определению и проверке на Nullable на всякий случай, но это не имело значения.
Большое спасибо!
Невозможно иметь тип с нулевым значением в коробке. Либо объект является DateTime, либо является нулевой ссылкой. –
Я не уверен, что вы пытаетесь сделать здесь ... 'DateTime' - это структура, она не может иметь нулевое значение. Вот почему вам явно нужно использовать нотацию '?', Чтобы она была нулевой. –
Возможно, вам будет интересно посмотреть это последнее сообщение: http://stackoverflow.com/questions/34938774/counterintuitive-design-of-addition-subtraction-between-numbers-and-nullable-num/34942047#34942047 – Ian