【发布时间】:2018-06-06 21:07:00
【问题描述】:
我创建了一个实现IComparable<> 的类。像这样。
public class Entry : IComparable<Entry>
{
private string Data;
public Entry(string data)
{
Data = data;
}
// Implementation...
public int CompareTo(Entry entry)
{
return Data.CompareTo(entry.Data);
}
}
然后我用这些对象填充ListBox 控件。
我的期望是我可以执行以下操作。但这似乎没有效果(并且没有抛出异常)。
Entry entry = new Entry("...");
MyListBox.SelectedItem = entry;
我认为它会使用我的自定义比较代码来查找匹配项。但是如果我在Entry.CompareTo() 中设置断点,它就永远不会被命中。
在网上搜索,有关设置SelectedItem 属性的信息似乎很薄。有人能解释一下这里发生了什么吗?
【问题讨论】:
-
public class Entry : IEquatable<Entry> -
@LarsTech:好的,为什么这行得通但
IComparable<>行不通? -
IComparable 用于排序。
-
@LarsTech:好吧,好吧。这似乎很奇怪,我需要两个不同的接口来测试相等性和比较排序。
IComparable也可以通过返回零来表示相等。无论如何,我尝试实现IEquatable<>和实现Equals但那里的断点也没有命中。 -
您的代码示例不起作用。您创建一个名为 entry 的“新”对象,然后尝试选择它。没有迹象表明您的“新”对象在该列表中。