这是使用Xamarin.Android并使用ArrayAdapter将一个非常简单的POCO实例捆绑在一起:
public class Subject
{
public Guid SubjectId { get; set; }
public string Name { get; set; }
}
调用ArrayAdapter.GetPosition
始终会返回-1
的返回码。然后我回忆一下,查找可能在某些Java代码中实现,因此我尝试在equals
类上实现Subject
,但令人惊讶的是,这并没有改变结果。
public override bool Equals(object obj)
{
return (obj != null && obj is Subject && (obj as Subject).SubjectId == SubjectId);
}
我在考虑实施==
运营商,但MSDN warns:
不建议在非不可变类型中覆盖operator ==。
我的类型显然不是一成不变的,所以无论如何我决定忽略一个工具operator ==
的警告:
public static bool operator == (Subject lhs, Subject rhs)
{
return ((object)lhs != null && (object)rhs != null && lhs.Equals(rhs));
}
但这并不能说服ArrayAdapter.GetPosition
真正找到一些候选人。潜伏在调试器中告诉我,两种方法都不会被调用。
感到沮丧,我写了一个名为FindIndex
的方法,它可能或多或少完全重复getPosition
可以做的事情:
public int FindIndex(Predicate<T> pred)
{
for (int i = 0; i < Count; ++i)
{
if (pred(this[i]))
{
return i;
}
}
return -1;
}
目前,我这样称呼它:subjectAdapter.FindIndex((candidate) => candidate.Equals(initialSubject));
它运作得很好。但这感觉就像重新发明轮子一样。
我应该如何表现得像一个好的公民&#34;哪个使用框架内提供的API?