From 0fc595f8a5efe748915a5a4d695faedbfb95b383 Mon Sep 17 00:00:00 2001 From: erri120 Date: Wed, 14 Aug 2024 14:20:57 +0200 Subject: [PATCH 1/5] Forward equality comparer to set --- src/ObservableCollections/ObservableHashSet.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ObservableCollections/ObservableHashSet.cs b/src/ObservableCollections/ObservableHashSet.cs index 8e2e1d4..655ecf2 100644 --- a/src/ObservableCollections/ObservableHashSet.cs +++ b/src/ObservableCollections/ObservableHashSet.cs @@ -14,23 +14,23 @@ namespace ObservableCollections readonly HashSet set; public object SyncRoot { get; } = new object(); - public ObservableHashSet() + public ObservableHashSet(IEqualityComparer? comparer = null) { - this.set = new HashSet(); + this.set = new HashSet(comparer: comparer); } #if NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER - public ObservableHashSet(int capacity) + public ObservableHashSet(int capacity, IEqualityComparer? comparer = null) { - this.set = new HashSet(capacity); + this.set = new HashSet(capacity: capacity, comparer: comparer); } #endif - public ObservableHashSet(IEnumerable collection) + public ObservableHashSet(IEnumerable collection, IEqualityComparer? comparer = null) { - this.set = new HashSet(collection); + this.set = new HashSet(collection: collection, comparer: comparer); } public event NotifyCollectionChangedEventHandler? CollectionChanged; From 82ae67ab29b1e8f855fc91498d490920be683540 Mon Sep 17 00:00:00 2001 From: erri120 Date: Wed, 14 Aug 2024 14:26:49 +0200 Subject: [PATCH 2/5] Forward equality comparer to dictionary --- src/ObservableCollections/ObservableDictionary.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ObservableCollections/ObservableDictionary.cs b/src/ObservableCollections/ObservableDictionary.cs index 897ac7e..5bb9a6f 100644 --- a/src/ObservableCollections/ObservableDictionary.cs +++ b/src/ObservableCollections/ObservableDictionary.cs @@ -13,17 +13,17 @@ namespace ObservableCollections readonly Dictionary dictionary; public object SyncRoot { get; } = new object(); - public ObservableDictionary() + public ObservableDictionary(IEqualityComparer? comparer = null) { - this.dictionary = new Dictionary(); + this.dictionary = new Dictionary(comparer: comparer); } - public ObservableDictionary(IEnumerable> collection) + public ObservableDictionary(IEnumerable> collection, IEqualityComparer? comparer = null) { -#if NET6_0_OR_GREATER - this.dictionary = new Dictionary(collection); +#if NETSTANDARD2_1_OR_GREATER || NET6_0_OR_GREATER + this.dictionary = new Dictionary(collection: collection, comparer: comparer); #else - this.dictionary = new Dictionary(); + this.dictionary = new Dictionary(comparer: comparer); foreach (var item in collection) { dictionary.Add(item.Key, item.Value); From 32f83949f65c231206d8edd268f4cd4253bff11e Mon Sep 17 00:00:00 2001 From: erri120 Date: Wed, 14 Aug 2024 14:30:39 +0200 Subject: [PATCH 3/5] Expose comparer --- src/ObservableCollections/ObservableDictionary.cs | 11 +++++++++++ src/ObservableCollections/ObservableHashSet.cs | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/ObservableCollections/ObservableDictionary.cs b/src/ObservableCollections/ObservableDictionary.cs index 5bb9a6f..e1c3d27 100644 --- a/src/ObservableCollections/ObservableDictionary.cs +++ b/src/ObservableCollections/ObservableDictionary.cs @@ -224,5 +224,16 @@ namespace ObservableCollections { return GetEnumerator(); } + + public IEqualityComparer Comparer + { + get + { + lock (SyncRoot) + { + return dictionary.Comparer; + } + } + } } } diff --git a/src/ObservableCollections/ObservableHashSet.cs b/src/ObservableCollections/ObservableHashSet.cs index 655ecf2..08076cc 100644 --- a/src/ObservableCollections/ObservableHashSet.cs +++ b/src/ObservableCollections/ObservableHashSet.cs @@ -264,5 +264,16 @@ namespace ObservableCollections { return GetEnumerator(); } + + public IEqualityComparer Comparer + { + get + { + lock (SyncRoot) + { + return set.Comparer; + } + } + } } } From 9b2d05798beb50251098f8ace70e9507b8682a4d Mon Sep 17 00:00:00 2001 From: JeongJiwon Date: Thu, 15 Aug 2024 20:25:15 +0900 Subject: [PATCH 4/5] add out keyword --- src/ObservableCollections/ObservableQueue.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ObservableCollections/ObservableQueue.cs b/src/ObservableCollections/ObservableQueue.cs index 2a66ca6..db18b5b 100644 --- a/src/ObservableCollections/ObservableQueue.cs +++ b/src/ObservableCollections/ObservableQueue.cs @@ -171,7 +171,7 @@ namespace ObservableCollections } } - public bool TryPeek([MaybeNullWhen(false)] T result) + public bool TryPeek([MaybeNullWhen(false)] out T result) { lock (SyncRoot) { From d7fac361bda51044a87516061570cf3cdf0b7b48 Mon Sep 17 00:00:00 2001 From: neuecc Date: Tue, 20 Aug 2024 17:08:27 +0900 Subject: [PATCH 5/5] capacity --- .../ObservableDictionary.cs | 20 ++++++++++++++-- .../ObservableHashSet.cs | 23 +++++++++++++++---- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/ObservableCollections/ObservableDictionary.cs b/src/ObservableCollections/ObservableDictionary.cs index e1c3d27..118fc87 100644 --- a/src/ObservableCollections/ObservableDictionary.cs +++ b/src/ObservableCollections/ObservableDictionary.cs @@ -3,6 +3,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; +using System.Linq; namespace ObservableCollections { @@ -13,12 +14,27 @@ namespace ObservableCollections readonly Dictionary dictionary; public object SyncRoot { get; } = new object(); - public ObservableDictionary(IEqualityComparer? comparer = null) + public ObservableDictionary() + { + this.dictionary = new Dictionary(); + } + + public ObservableDictionary(IEqualityComparer? comparer) { this.dictionary = new Dictionary(comparer: comparer); } - public ObservableDictionary(IEnumerable> collection, IEqualityComparer? comparer = null) + public ObservableDictionary(int capacity, IEqualityComparer? comparer) + { + this.dictionary = new Dictionary(capacity, comparer: comparer); + } + + public ObservableDictionary(IEnumerable> collection) + : this(collection, null) + { + } + + public ObservableDictionary(IEnumerable> collection, IEqualityComparer? comparer) { #if NETSTANDARD2_1_OR_GREATER || NET6_0_OR_GREATER this.dictionary = new Dictionary(collection: collection, comparer: comparer); diff --git a/src/ObservableCollections/ObservableHashSet.cs b/src/ObservableCollections/ObservableHashSet.cs index 08076cc..0b95615 100644 --- a/src/ObservableCollections/ObservableHashSet.cs +++ b/src/ObservableCollections/ObservableHashSet.cs @@ -14,21 +14,36 @@ namespace ObservableCollections readonly HashSet set; public object SyncRoot { get; } = new object(); - public ObservableHashSet(IEqualityComparer? comparer = null) + public ObservableHashSet() + { + this.set = new HashSet(); + } + + public ObservableHashSet(IEqualityComparer? comparer) { this.set = new HashSet(comparer: comparer); } #if NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER - public ObservableHashSet(int capacity, IEqualityComparer? comparer = null) + public ObservableHashSet(int capacity) + { + this.set = new HashSet(capacity: capacity); + } + + public ObservableHashSet(int capacity, IEqualityComparer? comparer) { this.set = new HashSet(capacity: capacity, comparer: comparer); } #endif - public ObservableHashSet(IEnumerable collection, IEqualityComparer? comparer = null) + public ObservableHashSet(IEnumerable collection) + { + this.set = new HashSet(collection: collection); + } + + public ObservableHashSet(IEnumerable collection, IEqualityComparer? comparer) { this.set = new HashSet(collection: collection, comparer: comparer); } @@ -185,7 +200,7 @@ namespace ObservableCollections public bool TryGetValue(T equalValue, [MaybeNullWhen(false)] out T actualValue) { - lock(SyncRoot) + lock (SyncRoot) { return set.TryGetValue(equalValue, out actualValue); }