C# 当集合已给出项的计数时,如何调用方法

C# 当集合已给出项的计数时,如何调用方法,c#,collections,delegates,C#,Collections,Delegates,当在我的列表属性中添加特定数量的项时,我想调用一个方法。实际上,我需要找到一种方法来自动检查集合是否给出了项的计数,然后调用一个方法 好的,举个例子。我有一门课,我的课 public class MyClass { public List<string> Url { get; set; } public void fullList() { //some work with the List } } 公共类MyClass { 公共列表

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

好的,举个例子。我有一门课,我的课

public class MyClass
{
    public List<string> Url { get; set; }

    public void fullList()
    {
        //some work with the List
    }
}
公共类MyClass
{
公共列表Url{get;set;}
公开作废完整列表()
{
//有些人会处理列表
}
}
现在,在主函数的某个地方,我创建了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");
MyClass mc=newmyclass();
mc.Url=newlist();
mc.Url.Add(“www.1.com”);
mc.Url.Add(“www.2.com”);
//现在在第三个添加的项目中,我想从MyClass类调用方法fullList
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;
}
classmyurl
{
列表_url=新列表();
公共无效添加(字符串url)
{
_添加(url);
if(_url.Count==3&&OnFull!=null)
OnFull.Invoke();
}
公共IEnumerable URL
{
得到
{
返回URL;
}
}
公众活动全面展开;
}
然后像这样使用它:

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");
公共类MyClass
{
公共MyClass()
{
url.OnFull+=完整列表;
}
公共myURL URL{get;}
公开作废完整列表()
{
//有些人会处理列表
}
}
MyClass mc=新的MyClass();
mc.url=newlist();
mc.url.Add(“www.1.com”);
mc.url.Add(“www.2.com”);
//现在在第三个添加的项目中,我想从MyClass类调用方法fullList
mc.url.Add(“www.3.com”);

不要重新发明轮子-使用

您可以将处理程序附加到修改集合时调用的
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");
ObservableCollection集合=新的ObservableCollection();
collection.CollectionChanged+=(发件人,参数)=>{
如果(args.Action==NotifyCollectionChangedAction.Add&&
collection.Count==3)
HandleItemsAdded(args.NewItems.Cast());
};
收藏。添加(“www.1.com”);
收藏。添加(“www.2.com”);
收藏。添加(“www.3.com”);
处理程序:

public static void HandleItemsAdded(IEnumerable<string> newItems)
{
    foreach(var item in newItems)
        Console.WriteLine(item);
}
publicstaticvoidhandleItemsadded(IEnumerable newItems)
{
foreach(newItems中的var项)
控制台写入线(项目);
}

工作提琴:

您能发布您的代码并告诉我们您到底想要什么吗?谢谢到目前为止,您已经尝试了什么,我们不是来为您编写代码的。请重新表述您的问题,因为很难理解您的意思。