2012-12-11 67 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

相关问题