2014-05-15 69 views
0

我在這個對象中有三個值propValue。下面的代碼通過循環我的結果爲我提供了所有的值。如何使用object []獲取來自對象的特定值GetValue()的索引?

如何通過將object[]Index作爲第二個參數傳遞給prop.GetValue來獲取值?

結果中有一個bool,object,string。這就是爲什麼我需要獲得特定的價值。

Type myType = result.GetType(); 
IList<PropertyInfo> props = new List<PropertyInfo>(myType.GetProperties()); 
tring str = ""; 
foreach (PropertyInfo prop in props) 
{ 
    object propValue = prop.GetValue(result,null); 
} 
+0

在你的代碼中,propValue只是保留了最後一個循環步驟的道具。 –

+0

'propValue'是'object []'?然後簡單地施放'((object [])propValue)[x]'。 – Sinatr

+0

object propValue = prop.GetValue(result,((object [])propValue)[1]); ??? – Anuya

回答

0

如果全部特性爲object[]類型,那麼:

foreach (PropertyInfo prop in result.GetType().GetProperties()) 
{ 
    // get object[] {bool, object, string} at once 
    var propValue = (object[])prop.GetValue(result,null); 
    var index1 = (bool)propValue[0]; 
    var index2 = propValue[1]; 
    var index3 = (string)propValue[2]; 
} 

如果你有不同的屬性,那麼你就可以check their types

測試object是棘手的,因爲所有類型都是對象(繼承自Object)。你並不需要測試它,但假設它,當其他測試失敗:

foreach (PropertyInfo prop in result.GetType().GetProperties()) 
{ 
    var propValue = prop.GetValue(result,null); 
    if(propValue is string) 
    { 
     // do something with string 
     continue; // to skip checking for other types 
    } 
    if(propValue is bool) 
    { 
     // do something with bool 
     continue; 
    } 
    // do something with object 
} 

相反的continue可以使用else if模式。

+0

錯誤:(object [])prop.GetValue(result,null)\t無法將'prop.GetValue(result,null)'(其實際類型爲'bool')轉換爲'object []'object [] – Anuya

+0

這就解釋了爲什麼'prop.GetValue(result,new object [] {0})'不起作用。什麼屬性有'結果'類型?也許你可以[按名稱]搜索它們(http://msdn.microsoft.com/en-us/library/kz0a8sxy.aspx)? – Sinatr

+0

它適用於字符串和布爾值。但是,當檢查val是對象時,它也會返回對象。 – Anuya

相關問題