在C#中创建一个Observable Hashset可以通过使用System.Collections.ObjectModel.ObservableCollection
和System.Collections.Specialized.NotifyCollectionChangedEventHandler
实现。下面是一个简单的示例代码:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
public class ObservableHashSet<T> : ObservableCollection<T>
{
private readonly HashSet<T> _hashSet;
public ObservableHashSet()
: base()
{
_hashSet = new HashSet<T>();
}
public ObservableHashSet(IEnumerable<T> collection)
: base(collection)
{
_hashSet = new HashSet<T>(collection);
}
public new void Add(T item)
{
if (_hashSet.Add(item))
{
base.Add(item);
}
}
public new void Remove(T item)
{
if (_hashSet.Remove(item))
{
base.Remove(item);
}
}
}
public class MainClass
{
public static void Main(string[] args)
{
ObservableHashSet<string> observableHashSet = new ObservableHashSet<string>();
// 添加元素
observableHashSet.Add("Hello");
observableHashSet.Add("World");
observableHashSet.Add("Hello"); // 不会重复添加
// 移除元素
observableHashSet.Remove("World");
observableHashSet.Remove("World"); // 不会抛出异常
// 监听集合变化
observableHashSet.CollectionChanged += (sender, e) =>
{
Console.WriteLine($"Action: {e.Action}, NewItems: {e.NewItems}, OldItems: {e.OldItems}");
};
// 添加元素
observableHashSet.Add("Test");
// 输出:Action: Add, NewItems: System.Collections.Generic.List`1[System.Object], OldItems: , Test
// 移除元素
observableHashSet.Remove("Test");
// 输出:Action: Remove, NewItems: , OldItems: System.Collections.Generic.List`1[System.Object], Test
}
}
这个示例代码中,我们创建了一个名为ObservableHashSet
的泛型类,继承自ObservableCollection
,并使用HashSet
来确保集合中的元素唯一。我们重写了Add
和Remove
方法,以便在添加或删除元素时更新HashSet
和ObservableCollection
。
在MainClass
中,我们创建了一个ObservableHashSet
实例,并向其中添加和删除元素。我们还添加了一个CollectionChanged
事件处理程序,以便在集合发生变化时输出相关信息。
这个示例代码展示了如何在C#中创建一个Observable Hashset,并且可以根据需要进行扩展和定制。
领取专属 10元无门槛券
手把手带您无忧上云