C# 编辑列表中的特定项

C# 编辑列表中的特定项,c#,winforms,C#,Winforms,我想问一下如何编辑收藏中的项目。例如:在集合myList I(字符串名称、日期时间事件)中。我想把这次活动推迟到明年 我试过: public class ClassEvent { public string Name { get; set; } public DateTime Date { get; set; } public ClassEvent(string name, DateTime date) {

我想问一下如何编辑收藏中的项目。例如:在集合myList I(字符串名称、日期时间事件)中。我想把这次活动推迟到明年

我试过:

 public class ClassEvent
    {
        public string Name { get; set; }

        public DateTime Date { get; set; }

 public ClassEvent(string name, DateTime date)
        {

            Name = name;
            Date = date;
        }
Myclass:

public List<ClassEvent> event= new List<ClassEvent>();
public void AddEvent(string name, DateTime MyEvent)
        {
            ClassEvent  ev = new ClassEvent(name, MyEvent.Date);
            event.Add(ev);
        }

但它不起作用。

您不能在foreach循环中修改集合。用于循环isntead:

将新项目添加到集合中,请执行以下操作:

  // Pay attention: backward loop
  for(int i = MyClass.event.Count - 1; i >= 0; --i) {
    ClassEvent a = MyClass.event[i];

    if (a.MyEvent == DateTime.Today)
      Myclass.AddEvent(a.name, a.MyEvent.AddYears(1);
  }
  // Any direction forward/backward will do
  for(int i = MyClass.event.Count - 1; i >= 0; --i) {
    ClassEvent a = MyClass.event[i];

    // Just change "a", since "a" is a item in the collection already
    //TODO: Check the syntax; "MyEvent" is expected being a writeable property 
    if (a.MyEvent == DateTime.Today)  
      a.MyEvent = a.MyEvent.AddYears(1);
  }
要更改集合中的现有项目,请执行以下操作:

  // Pay attention: backward loop
  for(int i = MyClass.event.Count - 1; i >= 0; --i) {
    ClassEvent a = MyClass.event[i];

    if (a.MyEvent == DateTime.Today)
      Myclass.AddEvent(a.name, a.MyEvent.AddYears(1);
  }
  // Any direction forward/backward will do
  for(int i = MyClass.event.Count - 1; i >= 0; --i) {
    ClassEvent a = MyClass.event[i];

    // Just change "a", since "a" is a item in the collection already
    //TODO: Check the syntax; "MyEvent" is expected being a writeable property 
    if (a.MyEvent == DateTime.Today)  
      a.MyEvent = a.MyEvent.AddYears(1);
  }

您正在foreach循环中创建一个新的ClassEvent,而不是编辑当前的ClassEvent。我会尝试:

forach( var a in MyClass.event)
{
  if(a.MyEvent == DateTime.Today)
   {
     a.MyEvent.AddYears(1);
   }
}

发布foreach循环中的
ClassEvent
定义枚举是不可变的,它们只能被读取。使用for循环代替。虽然你是正确的,但我认为OP需要编辑现有项,而不是添加新项