AndroidをターゲットにしたXamarinを使用してC#.Net 4.5でアプリケーションを開発する。私はそれにいくつかのプロパティを持つカスタムクラスを持っています。私は、Java.Util.IComparatorとJava.Lang.Objectを使用して比較を行う組み込みのコンポーネントを使用しようとしています。それは組み込みのコンポーネントなので、私はこれらの2つの項目を変更する柔軟性はあまりありません。キャストJavaオブジェクトをクラスにキャスト
私のカスタムクラスはrecBatchという名前で、その内部には整数と文字列のいくつかのプロパティがあります。
コンポーネントが初期化される場所です。これは基本的にヘッダをユーザがクリックこれは、コンポーネント
public Java.Util.IComparator GetBatchIdComparator() { return new BatchIdComparator(); }
によって呼び出されるメソッドであり、最後に、ここにある列0
tableView.SetColumnComparator(0, GetBatchIdComparator());
各時間メソッドを呼び出します呼び出しによって返されるクラス
私が上記のキャスティングで最初にやったことは、ここに見られるようなエラーです。私はVisual Studioが提案しているものを試しましたが、それを動作させることはできませんでした。
私が試した次の事はこの1つのような新しいクラスを作成し、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)のプロパティの1つにアクセスできます。しかし、再び、私はキャストの例外を取得します。正確なエラーは次のとおりです。
だから、基本的に、私はちょうどrecBatchにjava.lang.Object上位をキャストする必要がありますが、私はそれが間違ってやっていると思います。私がCompareメソッドにブレークポイントを置くとヒットし、渡されたlhs、rhs引数はJava.Langであってもそれらのクラスデータ(バッチ)を持つため、すべてが適切に「配線」されます。オブジェクトタイプ。
ご協力いただきましてありがとうございます。
ありがとうございます!
は、返信いただき、誠にありがとうございますが、私は、私はあなたの応答を理解していない怖いオブジェクトのようなプリミティブなデータ型/キャスト物事プリミティブデータ型レベル –
@athulを比較してみてください。 –
オブジェクト全体としてキャストするのではなく、シリアル化してCでクローンオブジェクトを作成してみてください。# –