[英]Default value of DateTime is not working as expected
我有一個帶有 DateTime 和 DateTime 的 class? variables,"if (value.= defaultValue)" 應該失敗,並且控件不應該在 go 里面。 但在我的情況下,它正在執行。 (value.= defaultValue) 不起作用。 我可以用什么替換代碼。 先感謝您
using System;
using System.Collections.Generic;
using System.Reflection;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
DateClass v = new DateClass();
v.Date1 = default;
v.Date1 = default;
foreach (PropertyInfo pi in v.GetType().GetProperties())
{
var type = pi.PropertyType;
var value = pi.GetValue(v);
var defaultValue = GetDefault(type);
if (value != defaultValue)
{
Console.WriteLine("not equal");
}
else
{
Console.WriteLine("equal");
}
}
}
public static object GetDefault(Type type)
{
if (type.IsValueType)
{
var k = Activator.CreateInstance(type);
return k;
}
return null;
}
}
public class DateClass
{
public DateTime Date1
{
get; set;
}
public DateTime? Date2
{
get; set;
}
}
}
問題是PropertyInfo.GetValue
的編譯時類型是object
...這意味着您基本上是在裝箱DateTime
,然后比較兩個不同的參考,並進行參考比較。
就我個人而言,我會說一個值為DateTime.MinValue
的字段(又名default(DateTime)
仍然是非空的(例如,一個值為 0 的int
字段),並且您應該更改名稱該方法或僅排除真正的 null 值。但是,如果您確實想走這條路,我會將您的條件更改為
if (!Equals(value, defaultValue))
這將執行值相等檢查,這就是您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.