我如何知道对象实例是另一个对象实例的属性还是子属性?
例如我有这个类结构:
public class Car
{
public Manufacturer Manufacturer {get;set;}
}
public class Manufacturer
{
public List<Supplier> {get;set;}
}
public class Supplier
{
string SupplierName {get;set;}
}
我只有两个实例,Car和SupplierName;在Reflection中使用PropertyInfo,如何实现
等方法bool IsPropertyOrSubPropertyOf(object ObjectInstance, object TargetObejectInstance)
用作
IsPropertyOrSubPropertyOf(SupplierNameInstance, CarInstance)
如果CarInstance的Property Manufacturer有一个具有SupplierName SupplierNameInstance的供应商,则此方法将返回true
答案 0 :(得分:2)
您不应该对您描述的特定示例使用反射:
bool IsPropertyOrSubPropertyOf(Supplier supplierInstance, Car carInstance)
{
return carInstance.Manufacturer.Suppliers.Contains(supplierInstance);
}
(顺便说一句,你错过了List<Supplier>
课程中Manufacturer
属性的名称。我假设它在我上面的代码中实际上被称为Suppliers
。)< / p>
答案 1 :(得分:2)
这是否符合您的要求?对不起,如果它不是最干净的 - 你可能也想在那里添加一些空检查。
private bool IsPropertyOrSubPropertyOf(Object Owner, Object LookFor)
{
if (Owner.Equals(LookFor))
{
// is it a property if they are the same?
// may need a enum rather than bool
return true;
}
PropertyInfo[] Properties = Owner.GetType().GetProperties();
foreach (PropertyInfo pInfo in Properties)
{
var Value = pInfo.GetValue(Owner, null);
if (typeof(IEnumerable).IsAssignableFrom(Value.GetType()))
{
// Becomes more complicated if it can be a collection of collections
foreach (Object O in (IEnumerable)Value)
{
if (IsPropertyOrSubPropertyOf(O, LookFor))
return true;
}
}
else
{
if (IsPropertyOrSubPropertyOf(Value, LookFor))
{
return true;
}
}
}
return false;
}
修改:我刚注意到如果LookFor
为IEnumerable
,那么您最终可能会遇到问题,请将其留给您进行整理;)