2012-03-22 30 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

下來選民照顧評論。 – 2012-03-22 12:52:28

+0

我想象誰投票是這樣做的,因爲這是一個寫得不好或格式不清的問題。 – Ian 2012-03-22 15:45:02

+0

這個庫不是由我創建的..所以我不知道有多少類型的系列可用。 – 2012-03-23 06:09:10

回答

0

最好的辦法是將接口添加到NDataSeries<T>這是不通用的。

如果它不是您的類,並且您沒有在此類型上找到任何非通用接口,則需要使用反射。

+0

我如何從這個對象中獲得價值seriesValues。它的Count屬性顯示6個元素。但我無法投射到另一種類型,以便我可以獲得這個集合的價值。 – 2012-03-23 06:32:49

0

很難準確理解你想從你的問題中得到什麼,但是對於運行時類型轉換,你可以使用Convert類。

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

閱讀你的其他評論聽起來像是你想要得到的物品。您可能只是可以對它進行foreach,如果不是,您可以嘗試將seriesValues作爲IEnumerable進行投射,然後對其進行foreach,或者對其調用GetEnumerator並枚舉這些值。

+0

是的..有點像這樣。是否可以轉換爲:'Convert.ChangeType(seriesValues,seriesValues.GetType());'? – 2012-03-22 17:47:51

+0

聽起來實際上你想要的是鑄造,但你需要知道你是在設計時鍵入的......將seriesValues轉換爲相同類型實際上不會做任何事情。 – Ian 2012-03-23 09:01:22

+0

@NiranjanKala:我已經更新了我的答案 - 看看是否有幫助 – Ian 2012-03-23 09:04:35

0

你爲什麼不把它扔到同級?

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

感謝您的建議..但我提到的未知類型是,下一次可能有其他類型的Series Class發生在seriesValues對象下。我希望它能將它與底層系列類的標識進行對比。 – 2012-03-22 17:44:11

+0

根據圖表類型進行基礎類更改。 – 2012-03-22 17:44:52

+0

好吧,'NDataSeriesDouble'實現'ICollection'接口,所以我不知道鑄造的問題。你會得到什麼錯誤信息? – 2012-03-22 18:13:07

相關問題