我已經繼承了這個Xamarin.Android應用程序,它有幾個問題。Xamarin.Android:先前插入ArrayAdapter的項目再次找不到
一個特殊的bug涉及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的工作與依賴於Java equals()
方法Xamarin.Android類型,內部(like ArrayAdapter; which delegates to List.indexOf(Object))?
我曾嘗試:
- 驗證了相應的Java版本工作正常(它)
- 壓倒
GetHashCode()
(沒關係,如我所料) - 一派,檢查關於實施
Equals()
(我發現沒有什麼特別相關的)信息的Xamarin文檔
謝謝, Jan
是的,但會配合我的POCO對Xamarin.Android(這是在Windows手機和iOS子項目也使用)。 – 2015-02-25 08:36:32
這是一個Xamarin.Forms應用程序嗎?如果不是,另一種選擇是創建自己的'Java.Lang.Object'代理,將其equals方法轉發給.NET對象equals方法。 – matthewrdev 2015-02-25 11:33:54