我正在处理很多FieldInfo信息,我想为某些类型的数据添加异常以便以不同的方式处理它们(为了创建一个整洁的输出字符串)但我找不到将对象强制转换为List的方法所以我可以从中得到数据。
我的代码:
string str = "";
string value = "";
foreach (FieldInfo fieldInfo in fieldInfos)
{
if (fieldInfo.Name == "Sprite" || fieldInfo.Name == "Background")
{
value = "Unreadable";
}
else if (fieldInfo.GetValue(type) == null)
{
value = "Null";
}
else
{
switch (fieldInfo.GetValue(type).GetType().Name)
{
default:
value = fieldInfo.GetValue(type).ToString();
break;
case "Color":
value = ((Color)fieldInfo.GetValue(type)).Name;
break;
case "List`1":
value = (((System.Collections.Generic.List<>)fieldInfo.GetValue(type)).Count - 1).ToString();
break;
}
}
str += " " + fieldInfo.Name + ": " + value + Environment.NewLine;
}
return str;
答案 0 :(得分:4)
将其转换为非通用ICollection
:
(((System.Collections.ICollection)fieldInfo.GetValue(type)).Count - 1).ToString();
它可以让您访问Count
属性。
答案 1 :(得分:1)
如果您只是在项目数量之后,那么只需使用IList
也实现的非通用List<>
:
case "List`1":
value = (((System.Collections.IList)fieldInfo.GetValue(type)).Count - 1).ToString();
break;
您可以通过将default
子句更改为此来支持任何容器来增加一些灵活性:
default:
if (typeof(System.Collections.ICollection).IsAssignableFrom(fieldInfo.GetValue(type).GetType())
value = (((System.Collections.ICollection)fieldInfo.GetValue(type)).Count - 1).ToString();
else
value = fieldInfo.GetValue(type).ToString();
break;
现在,您将处理Dictionary<>
和LinkedList<>
以及List<>