C# 比较可为空的datetime对象
我有两个可为空的datetime对象,我想比较这两个对象。最好的方法是什么 我已经试过:C# 比较可为空的datetime对象,c#,datetime,compare,nullable,C#,Datetime,Compare,Nullable,我有两个可为空的datetime对象,我想比较这两个对象。最好的方法是什么 我已经试过: DateTime.Compare(birthDate, hireDate); 这给出了一个错误,可能它需要类型为System.DateTime的日期,并且我有可为空的datetimes 我也尝试过: birthDate > hiredate... 但是结果并不像预期的那样……有什么建议吗?要比较两个可为空的对象,请使用如下: bool result = Nullable.Compare(birth
DateTime.Compare(birthDate, hireDate);
这给出了一个错误,可能它需要类型为System.DateTime
的日期,并且我有可为空的datetimes
我也尝试过:
birthDate > hiredate...
但是结果并不像预期的那样……有什么建议吗?要比较两个
可为空的对象,请使用如下:
bool result = Nullable.Compare(birthDate, hireDate) > 0;
您还可以执行以下操作:
使用可为空的DateTime的Value属性。(记住检查两个对象是否都有一些值)
如果两个值都是相同的DateTime.Compare将返回0
差不多
DateTime? birthDate = new DateTime(2000, 1, 1);
DateTime? hireDate = new DateTime(2013, 1, 1);
if ((birthDate.HasValue && hireDate.HasValue)
&& DateTime.Compare(birthDate.Value, hireDate.Value) > 0)
{
}
指示两个指定的可为空(Of T)对象是否相等
尝试:
最好的办法是:
如果希望将null
值视为default(DateTime)
可以执行以下操作:
public class NullableDateTimeComparer : IComparer<DateTime?>
{
public int Compare(DateTime? x, DateTime? y)
{
return x.GetValueOrDefault().CompareTo(y.GetValueOrDefault());
}
}
另一种方法是为值可比较的null
类型创建一个扩展方法
public static class NullableComparableExtensions
{
public static int CompareTo<T>(this T? left, T? right)
where T : struct, IComparable<T>
{
return left.GetValueOrDefault().CompareTo(right.GetValueOrDefault());
}
}
正如@Vishal所述,只需使用Nullable
的重写方法。其实施方式如下:
public override bool Equals(object other)
{
if (!this.HasValue)
return (other == null);
if (other == null)
return false;
return this.value.Equals(other);
}
如果两个可为null的结构都没有值,或者它们的值相等,则返回true
。所以,简单地使用
birthDate.Equals(hireDate)
试一试
比较之后再做你的事情
或者,使用
object.equals(birthDate,hireDate)
我想你可以用下面的方式使用这个条件
birthdate.GetValueOrDefault(DateTime.MinValue) > hireddate.GetValueOrDefault(DateTime.MinValue)
使用该方法。像这样:
var equal = Nullable.Compare<DateTime>(birthDate, hireDate);
var equal=Nullable.Compare(出生日期,受雇日期);
您可以编写一个通用方法来计算以下任何类型的最小值或最大值:
public static T Max<T>(T FirstArgument, T SecondArgument) {
if (Comparer<T>.Default.Compare(FirstArgument, SecondArgument) > 0)
return FirstArgument;
return SecondArgument;
}
var result = new[]{datetime1, datetime2, datetime3}.Max();
如果nullable没有值,您将在尝试访问value Property时遇到异常,在每种情况下都将返回哪些整数值,即><==如果其中一个日期为null,.value将为null,并将抛出带有“nullable object必须有值”的InvalidOperationException。OP可能想在其中添加空检查。@lazyberezovsky那么你认为最好的方法是什么?正如我所做的那样,在某些情况下,值可以为null。var equal=null.Compare(birthDate,hireDate)代码>是否为空<日期?空值和空值呢?当您使用生日>雇佣日期时,结果与您预期的结果有什么不同,因为这是最简单的方法。C#引入了提升操作员,使事情变得简单。可能重复
birthDate.Equals(hireDate)
object.equals(birthDate,hireDate)
birthdate.GetValueOrDefault(DateTime.MinValue) > hireddate.GetValueOrDefault(DateTime.MinValue)
var equal = Nullable.Compare<DateTime>(birthDate, hireDate);
public static T Max<T>(T FirstArgument, T SecondArgument) {
if (Comparer<T>.Default.Compare(FirstArgument, SecondArgument) > 0)
return FirstArgument;
return SecondArgument;
}
var result = new[]{datetime1, datetime2, datetime3}.Max();