首页 > 解决方案 > 使用自定义比较设置 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属性的信息似乎很薄。有人可以解释这里发生了什么。

标签: .netwinformslistbox

解决方案


尝试实现 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();
  }
}

推荐阅读