Entwicklung von Anwendung in C#. Net 4.5 mit Xamarin, Targeting Android. Ich habe eine benutzerdefinierte Klasse, die einige Eigenschaften enthält. Ich versuche, eine integrierte Komponente zu verwenden, die Vergleich mit Java.Util.IComparator und Java.Lang.Object durchführt. Da es sich um eine integrierte Komponente handelt, habe ich nicht viel Flexibilität, um diese beiden Elemente zu ändern.Geben Sie Cast Java-Objekt zu meiner Klasse
Meine benutzerdefinierte Klasse heißt recBatch und innerhalb davon habe ich einige Eigenschaften von ganzen Zahlen und Strings.
Hier wird die Komponente initialisiert. Er fordert im Grunde eine Methode jedes Mal, wenn der Benutzer auf den Titel klickt für Spalte 0.
tableView.SetColumnComparator(0, GetBatchIdComparator());
Dies ist die Methode, die von der Komponente
public Java.Util.IComparator GetBatchIdComparator() { return new BatchIdComparator(); }
Und schließlich ist hier aufgerufen wird, die Klasse, die vom Aufruf zurückgegeben wird.
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);
}
}
Das erste, was ich oben nur versucht zu tun Gießen einen Fehler gibt mir wie hier zu sehen. Ich habe versucht, was Visual Studio vorschlägt, aber es konnte auch nicht funktionieren.
Das nächste, was ich versuchte, war eine neue Klasse wie diese zu erstellen und die Besetzung von recBatch, meine eigentlichen Klasse auf diese neue Klasse das Casting zu tun ändern:
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; }
}
Mit dies, ich habe keine Fehler und kann kompilieren, aber das Problem ist, dass ich eine Cast-Ausnahme bekomme, wenn ich laufe. Der Code kompiliert und weil ich Casting bin, habe ich Zugriff auf eine der Eigenschaften in RecBatch (Batch oder RecBatch.Batch). Allerdings bekomme ich wieder eine Ausnahme. Der genaue Fehler ist:
Also im Grunde, ich muss nur die java.lang.Object in recBatch werfen, aber ich denke, ich es falsch mache. Alles ist richtig verdrahtet, denn wenn ich einen Breakpoint an der Compare-Methode anlege, trifft es zu und die übergebenen lhs, rhs Argumente haben meine Klassendaten in ihnen (dh Batch), obwohl sie Java.Lang sind. Objekttypen
Jede Hilfe ist willkommen!
Danke!
Versuch als primitive Datentypen/cast Dinge auf der Objekte primitiver Datentyp Ebene vergleichen –
@athul Sie für die Antwort sehr viel danken, aber ich fürchte, ich verstehe nicht, Ihre Antwort. –
Anstatt als Ganzes Objekt zu versuchen versuchen serialisieren und erstellen Sie ein geklontes Objekt in C# –