C# 从对象实例和属性信息获取列表引用
我有一个未知对象的实例,我正在迭代它的属性,我必须检索每个属性的每个实例,目前这是我的解决方案:C# 从对象实例和属性信息获取列表引用,c#,.net,reflection,C#,.net,Reflection,我有一个未知对象的实例,我正在迭代它的属性,我必须检索每个属性的每个实例,目前这是我的解决方案: private static void WriteMembers(object arg, XmlWriter writer, object[] attributes) { foreach (var property in arg.GetType().GetProperties()) { if (attributes.All(x => x.GetType() !=
private static void WriteMembers(object arg, XmlWriter writer, object[] attributes)
{
foreach (var property in arg.GetType().GetProperties())
{
if (attributes.All(x => x.GetType() != typeof (XmlIgnoreAttribute)))
{
if (property.GetIndexParameters().Length > 0)
{
//how to get list reference?
}
else
{
var value = property.GetValue(arg, null);
if (value != null)
{
WriteMember(value, property.Name, writer, property.GetCustomAttributes(false));
}
}
}
}
}
但是我不能使用PropertyInfo.GetValue
获取列表引用,因为它抛出TargetParameterCountException
,因为列表具有索引属性
如何检索列表实例?为了获取indexes属性,您需要知道请求的类型以及每种类型的所有可能条目,包括哪些条目可能存在或可能不存在或引发异常。您不能只获取索引属性,因为索引属性可以返回任意数量的值中的一个,甚至可以动态生成它们
在处理列表时,最好简单地忽略索引属性,而是手动复制基础数据。通过对象的
GetEnumerator()
有条件地处理IEnumerable
对象的情况可以使这变得更容易,但是如果我没有对象的引用,我将如何调用GetEnumerator()
?