当集合已给定项数时,如何调用方法

本文关键字:何调用 调用 方法 集合 | 更新日期: 2023-09-27 17:57:28

当在List属性中添加了特定数量的项时,我想调用一个方法。事实上,我需要找到一种方法来自动检查一个集合是否已经给出了项的计数,然后调用一个方法。

好的,举一个例子。我有一个班级我的班级

public class MyClass
{
    public List<string> Url { get; set; }
    public void fullList()
    {
        //some work with the List
    }
}

现在,在主函数的某个地方,我创建了MyClass的实例并添加了一些项。

MyClass mc = new MyClass();
mc.Url = new List<string>();
mc.Url.Add("www.1.com");
mc.Url.Add("www.2.com");
//now on 3rd added item I want to invoke method fullList from class MyClass
mc.Url.Add("www.3.com");

当集合已给定项数时,如何调用方法

您可能应该创建一个封装URL列表和所需行为的类。我想行为是,当列表达到3个项目时,它会"满",然后你希望引发一个MyClass可以监听的事件。

class MyUrls 
{
    List<string> _urls = new List<string>();
    public void Add(string url)
    {
        _urls.Add(url);
        if (_urls.Count == 3 && OnFull != null)
            OnFull.Invoke();
    }
    public IEnumerable<string> Urls
    {
        get
        {
            return _urls;
        }
    }
    public event Action OnFull;
}

并像这样使用:

public class MyClass
{
    public MyClass()
    {
       Urls.OnFull += fullList;
    }
    public MyUrls Urls { get; }
    public void fullList()
    {
        //some work with the List
    }
}
MyClass mc = new MyClass();
mc.Urls = new List<string>();
mc.Urls.Add("www.1.com");
mc.Urls.Add("www.2.com");
//now on 3rd added item I want to invoke method fullList from class MyClass
mc.Urls.Add("www.3.com");

不要重新发明轮子-使用ObservableCollection<T>

您可以将处理程序附加到CollectionChanged事件,该事件在修改集合时被调用。

ObservableCollection<string> collection = new ObservableCollection<string>();
collection.CollectionChanged += (sender, args) => {
    if(args.Action == NotifyCollectionChangedAction.Add &&
        collection.Count == 3)
        HandleItemsAdded(args.NewItems.Cast<string>());         
};
collection.Add("www.1.com");
collection.Add("www.2.com");
collection.Add("www.3.com");

经办人:

public static void HandleItemsAdded(IEnumerable<string> newItems)
{
    foreach(var item in newItems)
        Console.WriteLine(item);
}

工作Fiddle:http://dotnetfiddle.net/eIeilP