簡體   English   中英

DateTime 的默認值未按預期工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM