如何检查反射类型是否为数组

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 是一个包含 string[] 变量的类,在这种情况下被称为 mi[i]


你确定不想检查 objType.IsArray 吗? - Tim Schmelter
1
mi[i] 的类型是 MemberInfoMemberInfo 不是一个数组。 - pleinolijf
@TimSchmelter 我已经更新了我的问题,以更好地解释。 - Sayse
2
为了访问PropertyType属性,mi的类型应该是PropertyInfo[] - Rik
1个回答

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 - Tim Schmelter
@AndrasZoltan 是的,应该是 mi[i].PropertyType 而不是 mi[i].GetType() - Magnus
我的代码中无法使用 PropertyType? - Sayse
msdn对于MemberInfo的文档 - http://msdn.microsoft.com/zh-cn/library/system.reflection.memberinfo.aspx - Sayse
我找到了属性类型所在的位置,这是正确的: objType.GetProperty(mi[i].Name).PropertyType.Equals(typeof(string[]))感谢您的帮助! - Sayse
1
为了访问“PropertyType”属性,mi的类型应该是“PropertyInfo []”。 - Rik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接