2012-03-22 10 views
-1

は私がオブジェクト以下のクラスのいずれかが含まれてい反射のPropertyInfo.GetValue()方法を通じて返されるオブジェクトの値を取得しようとしています:UnderlyingSystemTypeクラスにオブジェクトを動的にキャストする方法

Class NDataSeriesDouble: NDataSeries<double> 
    {} 

    Class NDataSeriesString: NDataSeries<string> 
    {} 

//コードは、実行時にリスト値を取得するために

GetNthValueOfSereis(int n) 
{ 
    NHitTestResult hitTestResult = chartControl.HitTest(mouseXPoint, mouseYPoint) 
    // Get the sereis type object from Base class of this. 
    Type seriesType = hitTestResult.Series.GetType(); 
    object seriesValues= seriesType.GetProperty("Values") 
       .GetValue(hitTestResult.Series, null) 

**///How i get value from this object seriesValues** 

} 

seriesValuesオブジェクトには、NDataSeriesDoubleまたはNDataSeriesStringクラスオブジェクトが含まれます。

ご意見をお寄せください。

ありがとうございました。

+0

コメントを投稿する –

+0

投票が遅れた人は誰もが書かれた書式の問題であると考えています。 – Ian

+0

このライブラリは私によって作られたものではありません。 –

答えて

0

最も適切な方法は、汎用ではないNDataSeries<T>にインターフェイスを追加することです。

あなたのクラスではない場合、このタイプの非ジェネリックインターフェイスが見つからない場合は、リフレクションを使用する必要があります。

+0

このオブジェクトからどのように値を取得するのですか? Countプロパティは6要素を表示します。私はこのコレクションの値を得ることができるように私はいくつかの別の型にキャストすることができません。 –

0

あなたの質問から正確に理解するのは難しいですが、実行時の型変換ではConvertクラスを使用できます。

object result = Convert.ChangeType(value, typeof(MyTypeToConvertTo)); 

実際にアイテムを内部に入れたいと思うように聞こえます。もしあなたがIEnumerableとしてseriesValuesをキャストしようとすると、その上でforeachを試みることができない場合は、それをforeachすることができるかもしれません。代わりにGetEnumeratorを呼び出して、そのように値を列挙してみてください。

+0

はい。やや好きです。 'Convert.ChangeType(seriesValues、seriesValues.GetType());'? –

+0

実際にあなたが望むのはキャスティングですが、デザイン時には型を知っている必要があります。seriesValuesを同じ型に変換すると、実際には何も行われません。 – Ian

+0

@NiranjanKala:私は答えを更新しました - それが助けてくれるかどうかを確認してください。 – Ian

0

あなたはそのクラスにキャストしてみませんか?

var seriesValues = (Nevron.Chart.NDataSeriesDouble) seriesType 
    .GetProperty("Values").GetValue(hitTestResult.Series, null); 
+0

あなたの提案に感謝します..しかし、私は未知の型について言及しました。私は基本的なシリーズのクラスの識別でそれをキャストしたい。 –

+0

の基本クラスは、グラフの種類ごとに変更されます。 –

+0

さて、 'NDataSeriesDouble'は' ICollection'インターフェースを実装しているので、キャスティングの問題点は分かりません。どのようなエラーメッセージが表示されますか? –

関連する問題