我应该覆盖什么才能使用ArrayAdapter <t> .getPosition?

时间:2015-12-26 18:32:30

标签: c# android xamarin xamarin.android

这是使用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?

0 个答案:

没有答案