2012-12-11 58 views
3

我正在使用反射來讀取一個xml文件,並不斷遇到一個錯誤告訴我,我不能將一個字符串轉換爲一個字符串[](我不想要做!)我認爲我的問題的原因是我無法判斷對象的類型是否是一個數組。下面是我目前使用的是什麼(工作不正常),但我也試圖用if(mi[i].GetType() == typeof(string[]))這也行不通..如何檢查反射類型是否是數組

MemberInfo[] mi = objType.GetProperties(); 
for (int i = 0; i < mi.Length; i++) 
{ 
    if (mi[i].GetType().IsArray) 
    { 
    } 
    else 
    { 
    //Code path is running through here 
    } 

文件被正確讀取..

編輯:我想我會的結構更好地添加到我的objType更好地解釋..

objType是包含字符串[]變量,在這種情況下,被稱爲mi[i]

+0

你確定你不想檢查'objType.IsArray'呢? –

+1

'mi [i]'的類型是'MemberInfo'。 [MemberInfo](http://msdn.microsoft.com/en-us/library/System.Reflection.MemberInfo.aspx)不是一個數組。 – pleinolijf

+0

@TimSchmelter我已經更新了我的問題以更好地解釋 – Sayse

回答

7

你需要使用一個類PropertyType而不是GetType()MemberInfo以獲取該屬性的基礎類型。

var mi = objType.GetProperties(); 
for (int i = 0; i < mi.Length; i++) 
{ 
    var type = mi[i].PropertyType; 
    //Check for string array 
    if (type.IsArray && type.GetElementType() == typeof(string)) 
    { 
    } 
} 

或者你也可以做

if(type == typeof(string[])) 
{ 
} 
+1

但是他使用'type.IsArray'並且它永遠不會進入'if '。 –

+0

@AndrasZoltan是的,它應該是'mi [i] .PropertyType'而不是'mi [i] .GetType()'。 – Magnus

+0

PropertyType不適用於我? – Sayse

相關問題