gpt4 book ai didi

c# - IComparable.CompareTo 在 Sort 中与 null 进行比较

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:34 33 4
gpt4 key购买 nike

我想借助 IComparable<T>.CompareTo 对列表进行排序对于类型 T称为 Path .我写了

var shortest = new List<Path>();
//Fill shortest with elements != null
if (shortest.Contains(null))
throw new System.Exception("Path is null");
shortest.Sort();
if (shortest.Contains(null))
throw new System.Exception("Path is null");

令我惊讶的是,方法

    int IComparable<Path>.CompareTo(Path other)
{
if (other == null)
return -1;

if (!other.valid)
return 1;

if (pfad.Count() > other.pfad.Count())
{
return -1;
}
else if (pfad.Count() < other.pfad.Count())
{
return 1;
}
else
{
if (length > other.length)
return -1;
else
return 1;

}

}

来自类(class)

 public class Path : IComparable<Path>

Sort()调用与 other==null .更令我惊讶的是,在第一个代码块中,抛出了第二个异常,这意味着 shortest在排序之后而不是之前包含空值。

最佳答案

您的 CompareTo 函数已损坏。当对象与自身进行比较时,它不会返回 0,而当比较具有 valid == false 的两个对象时,它总是返回 1。所以可能有两个对象 ab,其中 a.CompareTo(b) == 1b.CompareTo(a) == 1 这可能会导致 Sort() 行为异常。

此外,正如其他答案中已经指出的那样,如果 other == null,它应该返回 1。 (当列表不包含 null 时应该无关紧要)

关于c# - IComparable<T>.CompareTo 在 Sort 中与 null 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14564554/

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