gpt4 book ai didi

c# - 尝试将扩展方法与 SortedDictionary 一起使用时出现异常...为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:20 27 4
gpt4 key购买 nike

我正在尝试将自定义对象放入已排序的字典中...然后我正在尝试在此已排序的字典上使用扩展方法 (Max())。但是,我遇到了异常:“至少一个对象必须实现 IComparable”。我不明白为什么会这样,因为我的自定义对象显然实现了 IComparable。这是我的代码:

public class MyDate : IComparable<MyDate>
{
int IComparable<MyDate>.CompareTo(MyDate obj)
{
if (obj != null)
{
if (this.Value.Ticks < obj.Value.Ticks)
{
return 1;
}
else if (this.Value.Ticks == obj.Value.Ticks)
{
return 0;
}
else
{
return -1;
}
}
}

public MyDate(DateTime date)
{
this.Value = date;
}

public DateTime Value;
}


class Program
{
static void Main(string[] args)
{
SortedDictionary<MyDate, int> sd = new SortedDictionary<MyDate,int>();

sd.Add(new MyDate(new DateTime(1)), 1);
sd.Add(new MyDate(new DateTime(2)), 2);

Console.WriteLine(sd.Max().Value); // Throws exception!!
}
}

我究竟做错了什么???

最佳答案

那是因为这不是要比较您的自定义对象,而是要比较 KeyValuePair 的实例。

这应该可行

Console.WriteLine(sd.Last().Value);   

因为排序后的字典是排序的,所以最后一项是最大的,假设比较器正在比较最小和最大。

关于c# - 尝试将扩展方法与 SortedDictionary 一起使用时出现异常...为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2806117/

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