【发布时间】:2016-06-22 00:03:27
【问题描述】:
使用 Xamarin 在 C# .Net 4.5 中开发应用程序,针对 Android。我有一个自定义类,其中包含一些属性。我正在尝试使用一个内置组件,该组件使用 Java.Util.IComparator 和 Java.Lang.Object 进行比较。因为它是一个内置组件,所以我没有太大的灵活性来更改这两项。
我的自定义类名为 recBatch,在其中,我有一些整数和字符串的属性。
这是组件被初始化的地方。每次用户单击第 0 列的标题时,它基本上都会调用一个方法。
tableView.SetColumnComparator(0, GetBatchIdComparator());
这是组件调用的方法
public Java.Util.IComparator GetBatchIdComparator()
{
return new BatchIdComparator();
}
最后,这是调用返回的类。
public class BatchIdComparator : Java.Lang.Object, Java.Util.IComparator
{
public int Compare(Java.Lang.Object lhs, Java.Lang.Object rhs)
{
var leftID = (recBatch)lhs;
var rightID = (recBatch)rhs;
return leftID.Batch.CompareTo(rightID.Batch);
}
}
我在上面尝试做的第一件事就是通过强制转换给我一个错误,如此处所示。我确实尝试了 Visual Studio 的建议,但也无法正常工作。
接下来我尝试创建一个像这样的新类并将演员表从我的实际班级 recBatch 更改为这个新班级来进行演员表:
public class BatchIdComparator : Java.Lang.Object, Java.Util.IComparator
{
public int Compare(Java.Lang.Object lhs, Java.Lang.Object rhs)
{
var leftID = (castClass)lhs;
var rightID = (castClass)rhs;
return leftID.BatchData.Batch.CompareTo(rightID.BatchData.Batch);
}
}
public class castClass : Java.Lang.Object
{
public castClass(recBatch batchData)
{
batchData = BatchData;
}
public recBatch BatchData { get; private set; }
}
有了这个,我没有错误并且可以编译,但问题是我在运行时遇到了强制转换异常。代码确实可以编译,并且因为我正在转换,所以我确实可以访问 recBatch 中的属性之一(Batch 或 recBatch.Batch)。但是,我再次遇到演员表异常。确切的错误是:
所以基本上,我只需要将 Java.Lang.Object 转换为 recBatch,但我想我做错了。一切都被正确地“连接”了,因为如果我在 Compare 方法处设置一个断点,它确实会命中,并且传入的 lhs、rhs 参数在其中包含我的类数据(即 Batch),即使它们是 Java.Lang。对象类型。
感谢任何帮助!
谢谢!
【问题讨论】:
-
尝试作为原始数据类型进行比较/在对象原始数据类型级别进行转换
-
@athul 非常感谢您的回复,但恐怕我不明白您的回复。
-
尝试序列化并在 C# 中创建一个克隆对象,而不是作为一个整体对象进行转换
标签: java c# android xamarin xamarin.android