我有一个类,它有许多属性,其中两个是日期:
public class AchFile
{
public DateTime FileDate { get; set; }
public DateTime EffectiveDate { get; set; }
// other properties
public int Insert()
{
//Set file date
if (FileDate == null)
{
FileDate = DateTime.Today;
}
//Set effective date
if (EffectiveDate == null)
{
EffectiveDate = ServiceUtil.NextBusinessDay(InterfaceId, FileDate);
}
return //....
}
}
当我创建类的实例时,我没有定义EffectiveDate
或FileDate
。如果我调用.Insert()
,这会导致一个问题,因为DateTime
对象不能是null
,因此无法正确访问这些if
语句。
更新if
语句的最佳方式是什么?
以下内容有意义吗?
// Default value for a DateTime object is MinValue
if (FileDate == FileDate.MinValue)
{
FileDate = DateTime.Today;
}
if (EffectiveDate == EffectiveDate.MinValue)
{
EffectiveDate = ServiceUtil.NextBusinessDay(InterfaceId, FileDate);
}
如果DateTime.MinValue
永远不会是这些属性的正常值,您可以对照它进行检查。不过,这感觉有些不愉快,因为它实际上变成了一种神奇的价值。
另一种选择是使属性为null:
public DateTime? FileDate { get; set; }
public DateTime? EffectiveDate { get; set; }
然后,可以根据默认值null
检查它们。
请注意,如果您真的只表示日期,那么如果您使用的是.NET6,我建议您使用DateOnly
类型来明确这一点。
您可以将DateTime
更改为DateTime?
,然后它们可以为null,这似乎是您想要的最准确的表示(一个没有值的日期(。
然后你改变:
ServiceUtil.NextBusinessDay(InterfaceId, FileDate);
至
ServiceUtil.NextBusinessDay(InterfaceId, FileDate.Value);
但是,如果您想避免使用null
,那么default(DateTime)
(或者在以后的C#版本中仅使用default
(就是您想要的。
您可以在创建时初始化属性,而根本不检查:
public class AchFile
{
public DateTime FileDate { get; set; }
public DateTime EffectiveDate { get; set; }
public AchFile() {
...
FileDate = DateTime.Today;
EffectiveDate = ServiceUtil.NextBusinessDay(InterfaceId, FileDate);
...
}
// other properties
public int Insert() {
...
return //....
}
}
如果这不是一条出路(比如说,你今天可以创建ArchFile
,但明天开始使用它(,那么你必须保留DateTime
,而不是DateTime?
您可以为属性指定某种默认值
public class AchFile
{
// 1 Jan 1 as a default value
public DateTime FileDate { get; set; } = DateTime.MinValue;
public DateTime EffectiveDate { get; set; } = DateTime.MinValue;
// other properties
public int Insert()
{
//Set file date
if (FileDate == DateTime.MinValue)
{
FileDate = DateTime.Today;
}
//Set effective date
if (EffectiveDate == DateTime.MinValue)
{
EffectiveDate = ServiceUtil.NextBusinessDay(InterfaceId, FileDate);
}
return //....
}
}