比较可空的datetime对象



我有两个可空的datetime对象,我想比较它们。最好的方法是什么?

我已经试过了:

DateTime.Compare(birthDate, hireDate);

这给出了一个错误,也许它期望类型为System.DateTime的日期,而我有可空日期时间。

我也试过了:

birthDate > hiredate...

但结果并不像预期的那样……有什么建议吗?

比较两个Nullable<T>对象使用 Nullable.Compare<T> 如下:

bool result = Nullable.Compare(birthDate, hireDate) > 0;

你也可以这样做:

使用可空DateTime的Value属性。(记住要检查两个对象是否都有一些值)

if ((birthDate.HasValue && hireDate.HasValue) 
    && DateTime.Compare(birthDate.Value, hireDate.Value) > 0)
{
}

如果两个值都是相同的日期时间。比较将返回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)
{
}

可为空。Equals指示两个指定的Nullable(Of T)对象是否相等。

试题:

if(birthDate.Equals(hireDate))
最好的方法是:Nullable。比较方法

Nullable.Compare(birthDate, hireDate));

如果你想把null的值当作default(DateTime)的值来处理,你可以这样做:

public class NullableDateTimeComparer : IComparer<DateTime?>
{
    public int Compare(DateTime? x, DateTime? y)
    {
        return x.GetValueOrDefault().CompareTo(y.GetValueOrDefault());
    }
}

并像这样使用

var myComparer = new NullableDateTimeComparer();
myComparer.Compare(left, right);
另一种方法是为值可比较的Nullable类型创建一个扩展方法
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());
    }
}

像这样使用

DateTime? left = null, right = DateTime.Now;
left.CompareTo(right);

使用Nullable.Compare<T>方法。这样的:

var equal = Nullable.Compare<DateTime>(birthDate, hireDate);

如@Vishal所述,只需使用Nullable<T>的重写Equals方法。它是这样实现的:

public override bool Equals(object other)
{
    if (!this.HasValue)    
        return (other == null);
    if (other == null)    
        return false;
    return this.value.Equals(other);
}

如果两个可空结构体都没有值,或者它们的值相等,则返回true。因此,只需使用

birthDate.Equals(hireDate)

我认为你可以这样使用这个条件

birthdate.GetValueOrDefault(DateTime.MinValue) > hireddate.GetValueOrDefault(DateTime.MinValue)

Try

birthDate.Equals(hireDate)

和做你的东西后比较。

,或者使用

object.equals(birthDate,hireDate)

您可以编写一个泛型方法来计算任何类型的最小值或最大值,如下所示:

public static T Max<T>(T FirstArgument, T SecondArgument) {
    if (Comparer<T>.Default.Compare(FirstArgument, SecondArgument) > 0)
        return FirstArgument;
    return SecondArgument;
}

然后在下面使用like:

var result = new[]{datetime1, datetime2, datetime3}.Max();

相关内容

  • 没有找到相关文章

最新更新