0

次のような 2 つのリストの違いを取得するために、C# 4.0 で IEnumerable.Except 関数を使用しようとしています。

//Function to get only available rooms out of all rooms of the hotel...
public IEnumerable<Room> GetAvailableRooms(DateTime arrival, DateTime leaving)
        {
                //.....
                foreach (Room value in v)
                    room_list.Add(value);
                return (dal.GetAllRooms()).Except(room_list);                
        }

しかし、この関数は機能しません - room_list のアイテムは削除されません。

(デバッグでチェックインしたところ、room_list に必要な値が含まれています)

dal.GetAllRooms は、データ アクセス層の xml ファイルからすべての部屋を取得する関数です。

リスト(xmlではなく)でDAL実装を使用すると、まったく同じ関数が正常に機能するため、問題はxmlに関するものであると確信しています。

4

2 に答える 2

1

でオーバーライドObject.EqualsRoomますか? それとも実装しIEquatableますか?そうでない場合はExcept、インスタンス内のすべての値が同じであっても、参照が同じかどうかを確認します。

例:

class Room
{
    public Room(int roomNumber) { RoomNumber = roomNumber; }
    public int RoomNumber { get; set; }
}

class Room2
{
    public Room2(int roomNumber) { RoomNumber = roomNumber; }
    public int RoomNumber { get; set; }

    public override bool Equals(object other)
    {
        var otherRoom = other as Room2;
        if(otherRoom == null)
            return false;

        return roomNumber == otherRoom.RoomNumber
    }
}


var room1a = new Room(404);
var room1b = new Room(404);

var room2a = new Room2(405);
var room2b = new Room2(405);

Assert.False(object.Equals(room1a, room1b));
Assert.True(object.Equals(room2a, room2b));
于 2012-02-01T09:51:13.023 に答える