【问题标题】:Do some operations after insert into List插入List后做一些操作
【发布时间】:2012-04-21 23:50:27
【问题描述】:

我有以下课程:

public class FirstClass 
{
   public FirstClass()
   {
       list = new List<SomeType>();
   }

   public List<SomeType> list;
}

这是否可以在有人将元素放入该列表后执行一些操作,例如触发不同的方法?

【问题讨论】:

  • 您删除了有关在 C# 中创建变量的问题。但仅供参考,出于好奇,我之前问过一个类似的问题:stackoverflow.com/questions/7478833/… 它在 Java 中,但大多数答案也适用于 C#。

标签: c#


【解决方案1】:

您应该为此使用ObservableCollection&lt;SomeType&gt;

ObservableCollection&lt;T&gt; 提供您可以订阅的 CollectionChanged 事件 - 当添加、删除、更改、移动项目或刷新整个列表时会触发 CollectionChanged 事件。

【讨论】:

    【解决方案2】:

    也许您应该使用ObservableCollection&lt;T&gt;。它会在添加或删除项目或其他几个事件时触发事件。

    这里是文档:http://msdn.microsoft.com/en-us/library/ms668604.aspx

    【讨论】:

      【解决方案3】:

      List 不会为此公开任何事件。您应该考虑改用ObservableCollection。它具有CollectionChanged 事件,当添加、删除、更改、移动或刷新整个列表时会发生该事件。

      【讨论】:

        【解决方案4】:

        你可以做类似的事情

                private List<SomeType> _list;
        
                public void AddToList(SomeType item)
            {
                _list.Add(item);
                SomeOtherMethod();
            }
        
              public ReadOnlyCollection<SomeType> MyList
            {
               get { return _list.AsReadOnly(); }
        }
        

        但 ObservableCollection 最好。

        【讨论】:

          【解决方案5】:

          如果您创建自己的 IList 实现,则可以在将项目添加到列表时调用方法(或执行任何您想要的操作)。创建一个继承自 IList 的类,并将 T 类型的列表作为私有成员。使用您的私有成员实现每个接口方法,并将 Add(T item) 调用修改为您需要它执行的任何操作

          代码:

          public class MyList<T> : IList<T>
          {
              private List<T> _myList = new List<T>();
          
                  public IEnumerator<T> GetEnumerator() { return _myList.GetEnumerator(); }
                  public void Clear() { _myList.Clear(); }
                  public bool Contains(T item) { return _myList.Contains(item); }
          
                  public void Add(T item) 
                  { 
                      _myList.Add(item);
                      // Call your methods here
                  }
          
                   // ...implement the rest of the IList<T> interface using _myList
             }
          

          【讨论】:

            猜你喜欢
            • 2012-10-06
            • 2015-10-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多