【问题标题】:Working with objects I found with Lambda Expressions in my List使用我在列表中使用 Lambda 表达式找到的对象
【发布时间】:2020-04-01 14:39:36
【问题描述】:

我想更改列表中对象的一些属性。

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

我可以找到我的“名称”属性为“着陆垫”的对象,但是如何更改属性“金额”? 我不能使用“x.Amount += 1”或类似的东西。

也许您对我有更好的想法如何在没有多个着陆垫对象的情况下将一些“着陆垫”添加到列表中?目前,我的“Landing Pad”有一个静态 int 量,我想为所有 LP 使用(并随着第二个、第三个......增加)。

【问题讨论】:

  • 您应该通过FirstSingleWhere 等获得参考并更新它们。
  • 我不知道你在列表中存储了什么——即使你的列表是一个列表我也不知道——请添加更多代码以查看上下文。

标签: c# list object lambda


【解决方案1】:

假设只有一个名为“Landing Pad”的元素

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

if (entity != null) { entity.Amount += 1; }

【讨论】:

    【解决方案2】:

    查看一些关于“LINQ”的教程,因为它是非常基础的东西(而且你的类名和属性没有遵循标准的 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:
    }
    
    

    【讨论】:

      【解决方案3】:

      这是处理这种情况的一种相当有趣的方法。但我会使用像这样简单的东西。

          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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多