Как я буду делать детализацию недвижимости? - PullRequest
0 голосов
/ 21 октября 2009

Как я узнаю, является ли экземпляр объекта свойством или подчиненным свойством другого экземпляра объекта?

например, у меня есть такая структура класса:

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; Используя PropertyInfo в Reflection, как я могу реализовать метод, такой как

bool IsPropertyOrSubPropertyOf(object ObjectInstance, object TargetObejectInstance)

используется как

IsPropertyOrSubPropertyOf(SupplierNameInstance, CarInstance)

этот метод будет возвращать значение true, если у Производителя Собственности CarInstance есть Поставщик, у которого есть SupplierName

Ответы [ 2 ]

2 голосов
/ 22 октября 2009

Это делает то, что вы ищете? Извините, если он не самый чистый - вы, вероятно, захотите добавить туда также нулевые проверки.

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, то вы можете столкнуться с проблемой, оставьте это для вас, чтобы разобраться;)

2 голосов
/ 21 октября 2009

Вам не нужно использовать отражение для конкретного примера, который вы описываете:

bool IsPropertyOrSubPropertyOf(Supplier supplierInstance, Car carInstance)
{
    return carInstance.Manufacturer.Suppliers.Contains(supplierInstance);
}

(Кстати, вы пропустили имя свойства List<Supplier> в вашем классе Manufacturer. Я предположил, что оно на самом деле называется Suppliers в моем коде выше.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...