Работа с объектами, которые я нашел с помощью лямбда-выражений в моем списке - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу изменить некоторые атрибуты объектов в моем списке.

if (Space_Resources.List_Of_Buildings.Exists(x => x.Name == "Landing Pad"))
                {
                    Console.WriteLine("already there!");                    
                }

Я могу найти свой объект, у которого атрибут "Name" является "Landing Pad", но как мне изменить атрибут "Amount" ? Я не могу использовать "x.Amount + = 1" или что-то в этом роде.

Возможно, у вас есть более подходящие для меня идеи, как добавить несколько "Landin Pads" в список, не имея нескольких объектов Landing pad? На данный момент у моей "Landing Pad" есть сумма c int, которую я хочу использовать (и увеличить со 2-го, 3-го, ...) для всех LP.

Ответы [ 3 ]

1 голос
/ 01 апреля 2020

при условии, что есть только один элемент с именем "Landing Pad"

var entity = Space_Resources.List_Of_Buildings.FirstOrDefault(m => m.Name == "Landing Pad");

if (entity != null) { entity.Amount += 1; }
0 голосов
/ 01 апреля 2020

это довольно интересный способ решения такой ситуации. Но я бы использовал что-то простое, как это.

    var lsSample = new List<SampleItem>();

    lsSample.Add(new SampleItem { Name = "Sample Item A" });
    lsSample.Add(new SampleItem { Name = "Sample Item B" });
    lsSample.Add(new SampleItem { Name = "Sample Item C" });

    foreach (var item in lsSample.Where(x => x.Name == "Sample Item A"))
    {
        item.Amount += 1;
    }

Вы также можете достичь тех же результатов, просто используя LINQ

        lsSample.Where(x => x.Name == "Sample Item A").Select((item) =>
        {
            item.Amount++;
            return item;

        }).ToList();
0 голосов
/ 01 апреля 2020

ознакомьтесь с некоторыми учебниками по "LINQ", потому что это нечто очень простое c (а ваши имена и свойства классов не соответствуют стандартному c# соглашению об именах)

// assuming there are multiple landing pads possible
foreach(var building in Space_Resources.List_Of_Buildings.Where(x=>x.Name == "Landing Pad")
{
    building.Amount += 1:
}

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