IndexOf 找不到列表中的最后一个元素



为什么IndexOfList中找不到最后一个元素?

  public List<Rule> rules = new List<Rule>();
  Rule n = new Rule();
  rules.Add(n);
  Console.WriteLine(n == rules.Last<Rule>()); //True
  dg_main.SelectedIndex = rules.IndexOf(n); //-1

答:谢谢大家的宝贵时间。我对这种情况感到非常困惑,我甚至没有看到这不是IndexOf的错。这是dg_main。SelectedIndex谁更改了索引。DataGrid已排序

IndexOf,如这里所见,使用了EqualityComparer的. equals方法,该方法使用了EqualityComparer。默认值,从而产生此比较器。如您所见,它使用. equals方法,而不是相等操作符。

一个重要的原因是相等操作符,像所有的操作符一样,是静态的,因此不能正确地调用你想要的操作符,除非编译器在编译时具有正确的类型。

这里最简单的解决方法是实现。equals并使其调用相等比较器。

// Equals overload for Rule objects
public bool override Equals(object obj)
{
    if(obj is Rule)
        return (Rule)obj == this; // Type cast here to ensure the right equality operator is called
    else return base.Equals(obj);
}

我认为你没有显示的那部分代码有错误,因为下面的代码工作正确:

[Test, Explicit]
public void Test()
{
  List<Rule> rules = new List<Rule>();
  Rule n = new Rule();
  rules.Add(n);
  Assert.AreEqual(n , rules.Last());
  Assert.AreEqual(0, rules.IndexOf(n));
}

相关内容

  • 没有找到相关文章

最新更新