C# 转换日期时间?在C中的setter函数中使用DateTime

C# 转换日期时间?在C中的setter函数中使用DateTime,c#,datetime,asp.net-web-api,C#,Datetime,Asp.net Web Api,我有一个来自WEBApi的响应契约,它返回可为null的DateTime。但我需要它仅为DateTime,如果为null,则将值设置为DateTime.MaxValue private DateTime endDate; public DateTime? EndDate { get { return endDate; } set { if (value == null) endDate

我有一个来自WEBApi的响应契约,它返回可为null的DateTime。但我需要它仅为DateTime,如果为null,则将值设置为DateTime.MaxValue

private DateTime endDate;
public DateTime? EndDate
    {
        get { return endDate; }
        set
        {
            if (value == null)
                endDate = DateTime.MaxValue;
            else
            {
                endDate = value;
            }
        }
    }
但是这种方法需要我显式地转换DateTime?在我的整个代码中都是DateTime。所以,我想知道Setter函数将如何工作?是否先初始化它,然后检查数据类型?如果是,那么我可以用下面的代码替换上面的代码:

private DateTime endDate;
public DateTime EndDate
    {
        get { return endDate; }
        set
        {
            if (value == null)
                endDate = DateTime.MaxValue;
            else
            {
                endDate = value;
            }
        }
    }

这可能吗?或者,在反序列化过程中,是否在数据类型检查后调用Setter函数?

否,这是不可能的。可以创建默认属性以获取值:

public DateTime EndDateOrDefault
{
    get { return endDate; }
}

并在代码中调用该属性。您可以保留当前属性以符合服务合同。

不,这是不可能的,传递的值必须与属性具有相同的类型。您可以在代码中使用其他属性:

public DateTime? ApiEndDate { get; set; }

public DateTime EndDate => ApiEndDate ?? DateTime.MaxValue;

现在api使用属性APIENDDATA如果您不能重命名它,请将其保留为EndDate并重命名另一个,您可以在代码中使用另一个属性。

默认值应该是什么样子?DateTime.MaxValue也是?是的,默认值是DateTime.MaxValue我认为您唯一的选择是使用空合并运算符。@程序员新手:他希望避免在代码中访问此属性的任何地方都使用空合并运算符。关键是它不能为null,因为DateTime.MaxValue是null情况下的新值。因此,在调用setter函数之前将检查数据类型?您当前的属性保持不变,因此不会更改服务的要求。只需在所有代码中调用此属性,以避免每次都必须调用.Value。