C# 转换日期时间?在C中的setter函数中使用DateTime
我有一个来自WEBApi的响应契约,它返回可为null的DateTime。但我需要它仅为DateTime,如果为null,则将值设置为DateTime.MaxValueC# 转换日期时间?在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
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。