【发布时间】:2015-02-26 06:19:03
【问题描述】:
我继承了这个 Xamarin.Android 应用,但它存在一些问题。
一个特定的错误涉及ArrayAdapter<ProductListObject>,其中ProductListObject 是子项目(即Android、Windows Phone 和iOS)之间共享的常见POCO;它只有几个属性(例如Id)并覆盖(.NET)Equals() 方法以实现结构平等:
public class ProductListObject
{
public long Id { get; set; }
public override bool Equals(object obj)
{
if (!(obj is ProductListObject))
{
return false;
}
return Id == (obj as ProductListObject).Id;
}
}
问题是,每当我将这个ProductListObject 的实例放入ArrayAdapter 中时,即使它们具有相同的Id,我也无法再次找到它:
var p1 = new ProductListObject { Id = 1 };
var p2 = new ProductListObject { Id = 1 };
var areEqual = p1.Equals(p2); // returns True, as expected
var productAdapter = new ArrayAdapter<ProductListObject>(this, 0, new[] { p1 });
var position = productAdapter.GetPosition(p2); // returns -1 >:(
我的问题是:我必须做些什么才能使我的 POCO 与内部 (like ArrayAdapter; which delegates to List.indexOf(Object)) 依赖于 Java equals() 方法的 Xamarin.Android 类型一起工作?
我尝试过的:
- 已验证相应的 Java 版本是否按预期工作(确实如此)
- 覆盖
GetHashCode()(没关系,正如我所料) - 谷歌搜索并检查了 Xamarin 文档以获取有关实现
Equals()的信息(我没有发现任何特别相关的内容)
谢谢, 一月
【问题讨论】:
标签: xamarin xamarin.android android-arrayadapter