【问题标题】:How to Update an item in a collection using and C#如何使用 C# 更新集合中的项目
【发布时间】:2011-10-05 03:37:12
【问题描述】:

前段时间我问了一个问题here“如何使用Linq和C#在集合中添加一个项目”

例如我有相同的收藏:

      List<Subscription> subscription = new List<Subscription>
       {
           new Subscription{Type = "Trial", Period = 30 },
           new Subscription{Type = "Free", Period = 90 },
           new Subscription{Type = "Paid", Period = 365 }
       };

现在我想使用 C# 代码更新此列表中的一项。有可能吗?

【问题讨论】:

  • 订阅[0].Type = "ChangedTypeOfFirstItem";
  • 更新项目就像从列表中获取项目然后根据需要执行任何更新一样简单。您是否希望通过特定方式更新特定项目?
  • @Reniuz 这仅在 Subscription 是引用类型时才有效。诚然,如果 Subscription 是一种值类型,那会很奇怪,但仍然应该注意。

标签: c# entity-framework generics


【解决方案1】:

您的订阅列表包含 3 个对 3 个订阅对象的引用。如果您更新该列表中的 3 个订阅对象中的任何一个(通过任何方式),则该列表将引用更新后的元素。

subscription.First(s => s.Period == 30).Trial = "new";

将更新订阅对象。列表不会更改,但它引用已更新的相同对象

【讨论】:

    【解决方案2】:

    您创建一个上下文管理器,例如dbManager

    var subscription = dbManager.Subscriptions.Single(s => s.Type == "Free");
    subscription.Period = 120;
    dbManager.SaveChanges();
    

    【讨论】:

      【解决方案3】:

      要将列表中的第一项更新为新时期,您可以这样做:

      subscription[ 0 ].Period = 40;
      

      【讨论】:

        【解决方案4】:

        <_instancename>[ItemIndex].<_property>= newValue

        【讨论】:

          【解决方案5】:

          此外,如果您希望更新集合中的所有项目,您可以这样做,

          subscription.ForEach(s => s.Period = 30);
          

          【讨论】:

            【解决方案6】:

            应该注意,如果 Subscription 是一种值类型,您需要执行以下操作:

            Subscription updateMe = subscription[0];
            updateMe.Period = 40;
            subscription[0] = updateMe;
            

            我还要注意,集合名称通常是复数,所以列表应该命名为subscriptions。但是,我认为,如果开发代码的开发人员是母语为不使用此类复数的语言的人,那么这种约定就失去了它的价值。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-04-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多