我有一个项目列表,并将其复制到一个集合中.如果列表发生任何更改,它应该自动反映在集合中

本文关键字:列表 集合 任何更 如果 一个 项目 有一个 复制 | 更新日期: 2023-09-27 17:53:28

My Project is

步骤1:创建一个c#控制台应用程序,它应该创建一个String类型的列表,并添加item1, item2和item3。

步骤2:创建一个String类型的Collection并复制这些项目。

步骤3:如果在List对象中发生任何更改,它应该反映在Collection对象中。

我成功地完成了第2步,我的代码是

class Program
    {
        static void Main(string[] args)
        {
            List<string> newList = new List<string>();
            newList.Add("Item 1");
            newList.Add("Item 2");
            newList.Add("Item 3");
            Collection<string> newColl = new Collection<string>();
            foreach (string item in newList)
            {
                newColl.Add(item);
            }
            Console.WriteLine("The items in the collection are");
            foreach (string item in newColl)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
    }

现在,如果列表发生了变化,它将如何反映在集合对象?

我有一个项目列表,并将其复制到一个集合中.如果列表发生任何更改,它应该自动反映在集合中

尝试使用ObservableCollection代替List<string>并订阅事件CollectionChanged。这是一个很简单的实现,只是给大家一个大概的概念。您应该添加参数检查或执行其他类型的同步,因为您没有说明如何准确地在Collection

上反映更改。
ObservableCollection<string> newList = new ObservableCollection<string>();
newList.Add("Item 1");
newList.Add("Item 2");
newList.Add("Item 3");
Collection<string> newColl = new Collection<string>();

newList.CollectionChanged += (sender, args) => 
        {
            foreach (var newItem in args.NewItems)
            {
                newColl.Add(newItem);
            }
            foreach (var removedItem in args.OldItems)
            {
                newColl.Remove(removedItem);
            }
        };