bugfix> c# > 投稿

私のuwpプロジェクトには、 Rooms と呼ばれるリストがありますそして、これはそのリストの内容です:

public string RoomID { get; set; }
public string RoomName { get; set; }
public Visibility Projector { get; set; }
public int Seats { get; set; }
public string FrontImage { get; set; }
public string Note { get; set; }

Projector の値を挿入しようとしていますに

Rooms.Add(new Room
{
    RoomID = id,
    RoomName = name,
    FrontImage = Img1,
    Seats = seats,
    Note = "Lorem ipsum dolor sit amet, co"
});

このコード行。

Rooms.Insert(1, new Room{ Projector = Visibility.Collapsed });

しかし、キーワード new を使用すると新しい部屋が作成されました。既存の部屋に「プロジェクター」値を挿入する他のキーワードはありますか?

前もって感謝します!

編集:

foreach (var room in data)
{
    string id = room.id;
    string name = room.name;
    int seats = room.seats;
    List<Roomattribute> roomattrib = room.roomAttributes;
    foreach (var attri in roomattrib)
    {
        int attriId = attri.id;
        string attriName = attri.name;
        int attriIcon = attri.icon;
        if (attriId == 1)
        {
            Rooms.Insert(0, new Room{ Projector = Visibility.Collapsed });
        }  
    }
    Rooms.Add(new Room
    {
        RoomID = id,
        RoomName = name,
        FrontImage = Img1,
        Seats = seats,
        Note = "Lorem ipsum dolor sit amet, co"
    });
}

回答 2 件
  • これはあなたがやろうとしていることですか?

    foreach (var room in data)
    {
        var newRoom = new Room()
        {
            RoomID = room.id,
            RoomName = room.name,
            FrontImage = Img1,
            Seats = room.seats,
            Note = "Lorem ipsum dolor sit amet, co"
        };
        //if any of the room's attribute's ID is 1
        if (room.roomAttributes.Any(a => a.id == 1))
            newRoom.Projector = Visibility.Collapsed;
        Rooms.Add(newRoom);
    }
    
    

    または、コードの単一の変換行を使用してさらにシンプルにします(列挙型の場合、以下の「null」をデフォルトに調整する必要があることに注意してください)。これはforeachを完全に回避し、非常に簡潔に読み取ります。このコードの書き方です。

    Rooms.AddRange(data.Select(a => new Room() {
            RoomID = a.id,
            RoomName = a.name,
            FrontImage = Img1,
            Seats = a.seats,
            Note = "Lorem ipsum dolor sit amet, co"
            Projector = a.roomAttributes.Any(a => a.id == 1) ? Visibility.Collapsed : null
        });
    
    

  • リストの2番目の部屋のプロパティを編集しようとすると、index = 1を使用しているために表示されます(配列とリストは0から始まることに注意してください)。これは非常に簡単です。編集:最初のものを編集したいと言ったので、必要な変更はインデックスとして0を使用することだけです。

    Rooms[0].Projector = Visibility.Collapsed;
    
    

    それがあなたがやろうとしているのであれば、上記はうまくいくはずです。

あなたの答え