gpt4 book ai didi

C# - IComparer - 如果 datetime 为空,则应排序到底部而不是顶部

转载 作者:太空狗 更新时间:2023-10-29 20:46:59 25 4
gpt4 key购买 nike

我有一个要按升序排序的日期列表。但是,默认比较器意味着我有:

null
null
18/01/2011
23/01/2011

有人可以帮助 IComparer 这意味着按升序排序的日期将如下所示:

18/01/2011
23/01/2011
null
null

最佳答案

这是一个适用于几乎任何类型的通用比较器:

var yourList = new List<DateTime?>
{
null, new DateTime(2011, 1, 23),
null, new DateTime(2011, 1, 18)
};

var comparer = new NullsLastComparer<DateTime?>();
yourList.Sort(comparer); // now contains { 18/01/2011, 23/01/2011, null, null }

// ...

public sealed class NullsLastComparer<T> : Comparer<T>
{
private readonly IComparer<T> _comparer;

public NullsLastComparer() : this(null) { }

public NullsLastComparer(IComparer<T> comparer)
{
_comparer = comparer ?? Comparer<T>.Default;
}

public override int Compare(T x, T y)
{
if (x == null)
return (y == null) ? 0 : 1;

if (y == null)
return -1;

return _comparer.Compare(x, y);
}
}

关于C# - IComparer - 如果 datetime 为空,则应排序到底部而不是顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4734055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com