为什么IndexOf
在List
中找不到最后一个元素?
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));
}