.net - 使用自定义比较设置 ListBox.SelectedItem
问题描述
我创建了一个实现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
属性的信息似乎很薄。有人可以解释这里发生了什么。
解决方案
尝试实现 IEquatable 接口。由于您显然不关心对象比较,因此您可以在 Data 字段(可能应该是一个属性)上返回 String.Equals 结果的结果。
public class Entry : IEquatable<Entry> {
private string Data = string.Empty;
public Entry(string data) {
Data = data;
}
public bool Equals(Entry other) {
if (other == null) return false;
return String.Equals(this.Data, other.Data);
}
public override bool Equals(object obj) {
return Equals(obj as Entry);
}
public override int GetHashCode() {
return this.Data.GetHashCode();
}
}
推荐阅读
- python - 用 Python 从文件中读取?
- reactjs - Next.js 中的默认动态路由
- bash - Conda 创建环境 - 找不到兼容的 Shell
- sql - 重命名大表
- c# - Groupby,选择EF Ccore 3.1
- python - HuggingFace SciBert AutoModelForMaskedLM 无法导入
- java - 如何使用可变参数将任意数量的相同类型参数传递给方法?
- javascript - 使用 JavaScript 更改 SVG 路径的单个值
- python - Python - 打开多个文件并输出文件名
- python - 我想通过网络抓取从谷歌学者那里获得一篇文章的 bibTex 引用