2012-03-16 1 views
0

У меня есть 4 основных класса: дом, этаж, комната, имущество. Объект находится в комнате, которая находится на этаже, который находится в доме. Каждый из них имеет разные свойства; а именно, имя публичной строки;Получить список объектов, свойства которых содержат переданный аргумент?

Я заканчиваю методы CRUD и сталкивался с довольно простой проблемой в отношении удаления всего пола, который может содержать или не содержать как помещения, так и активы.

//pseudocode-ish 
House.cs 

private readonly List<Floor> _floors = new List<Floor>(); 
private readonly List<Room> _rooms = new List<Room>(); 
private readonly List<Asset> _assets = new List<Asset>(); 
. 
.. 
public IEnumerable<Floor> GetFloors() 
    { 
     return _floors; 
    } 
public IEnumerable<Room> GetRooms() 
    { 
     return _rooms; 
    } 
public IEnumerable<Asset> GetAssets() 
    { 
     return _Assets; 
    } 
... 
.. 
. 
public void deleteFloor(Floor oldFloor) 
{ 
//locate rooms on oldFloor (roomOnFloor.floor.name == oldfloor.name) 
//locate a rooms with assets (asset.room.name == roomOnFloor.floor.name) 
//create a "limbo" room and move assets into it. 
{ 

Я понял, что наилучшим образом это происходит с использованием IEnumerable с некоторыми логическими аргументами. Не уверен, где начать. Или, может быть, захватить свойства и запустить foreach?

Если мой вопрос недостаточно ясен или не хватает важной информации, пожалуйста, дайте мне знать, и я отвечу как можно скорее.

ответ

0

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

foreach (Room room in this._rooms) 
     { 
      if (oldFloor.Name == room.Floor.Name) 
      { 
       foreach (Asset asset in this._assets) 
       { 
        if (asset.Parent == room) 
        { 
         asset.Parent = null; 
        } 
       } 
      } 

     } 
0

Возможно, было бы проще, чтобы каждый уровень сохранил список следующего, как древовидная структура. Дом содержит список полов. Пол содержит список комнат. Номера содержат список активов. Каждый уровень объекта также может хранить второй список «limbo».

Затем удаление/восстановление полов (или нижних уровней) так же просто, как перемещение записи из одного списка в другой без рекурсии.

+0

Возможно, это был лучший подход. Однако в этом проекте я пересек горизонт пресловутого события. знак равно – Ealianis

Смежные вопросы