Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取其属性包含传递参数的实体列表?_C#_Loops_Ienumerable - Fatal编程技术网

C# 获取其属性包含传递参数的实体列表?

C# 获取其属性包含传递参数的实体列表?,c#,loops,ienumerable,C#,Loops,Ienumerable,我有四大类:房子、地板、房间、资产。 资产位于房间中,房间位于房子的地板上。 每一种都有不同的性质;即公共字符串名 我正在完成CRUD方法,遇到了一个相当简单的问题,即删除可能包含或不包含房间和/或资产的整个楼层 //pseudocode-ish House.cs private readonly List<Floor> _floors = new List<Floor>(); private readonly List<Room> _rooms = new

我有四大类:房子、地板、房间、资产。 资产位于房间中,房间位于房子的地板上。 每一种都有不同的性质;即公共字符串名

我正在完成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.
{
//伪代码
豪斯酒店
私有只读列表_floors=新列表();
私人只读列表_rooms=新列表();
私有只读列表_assets=new List();
.
..
公共IEnumerable GetFloors()
{
返回楼层;
}
公共IEnumerable GetRooms()
{
返回房间;
}
公共IEnumerable GetAssets()
{
归还资产;
}
...
..
.
公共楼层(旧楼层)
{
//在oldFloor上定位房间(roomOnFloor.floor.name==oldFloor.name)
//定位包含资源的房间(asset.room.name==roomOnFloor.floor.name)
//创建一个“边缘”房间并将资产移入其中。
{
我认为最好的方法是利用IEnumerable和一些逻辑参数。不知道从哪里开始。或者抓取属性并运行foreach


如果我的问题不够清楚或缺少重要信息,请告诉我,我会尽快回答。

也许让每一层存储下一层的列表会更简单,就像树结构一样。房子包含楼层列表。楼层包含房间列表。房间包含资产列表。每个对象层也可以存储第二个“边缘”列表


然后,删除/恢复楼层(或较低级别)就像将条目从一个列表移动到另一个列表一样简单,无需递归。

这就是我能做的。可能可以创建一个复合lambda表达式??但现在我将坚持这种方法

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;
                    }
                }
            }

        }

这可能是一个更好的方法。然而,在这个项目中,我已经跨越了众所周知的事件视界。=)