我的班级看起来像这样:
public class Test
{
public A[] ArrayA { get;set; }
}
public class A
{
public string P1 { get;set; }
public int P2 { get;set; }
}
假设我有两个 Test 类的对象。我想使用反射来比较两者,假设两个对象中两个 ArrayA 属性的数组长度相同。 例如:
Test a = new Test();
Test b = new Test();
// fill them with some info.
var props = typeof(Test).GetProperties();
foreach (var prop in props)
{
var arrayA = prop.GetValue(a);
var arrayB = prop.GetValue(b);
for (int i = 0; i < arrayA.Lenght; i++)
{
var item1 = arrayA.GetValue(i);
var item2 = arrayB.GetValue(i);
// Do Comparison of item1 and item2
}
}
这就是我遇到问题的地方。 item1 和 item2 都是对象类型。我似乎无法从中获取原始类型。我可以从数组中获取 Type,如何使用它来获取 item1 和 item2 中我想要的属性?我想使用反射来抓取item1和item2的属性信息,以便进行比较。这可行吗?
仅供参考。除了使用反射之外,我对任何其他解决方案都不感兴趣。我已经知道如何做到这些了。
如果必须使用反射 - 那么您可以通过它仅提取属性将返回的数组。
然后有一个只适用于
A[]
: 的相等方法
void Main()
{
Test a = new Test();
Test b = new Test();
var props = typeof(Test).GetProperties();
var arrProperty = props
.Where(x => x.PropertyType == typeof(A[]))
.FirstOrDefault();
var arrayA = arrProperty.GetValue(a) as A[];
var arrayB = arrProperty.GetValue(b) as A[];
var arraysEqual = Equal(arrayA,arrayB);
}
public bool Equal(A[] first, A[] second)
{
// logic irrespective of reflection
// SequenceEquals e.g.
return false;
}