10using System.Collections.Generic;
13using System.Collections;
17 [Obsolete(
"It is no longer required to annotate SerializableHashSets with the SHashSet attribute.")]
24 ISerializationCallbackReceiver,
28 private List<T> _values =
new List<T>();
31 private HashSet<T> _set =
new HashSet<T>();
36 get {
return _set.Count; }
39 public bool Add(T item) {
40 return _set.Add(item);
48 return _set.Contains(item);
52 return _set.Remove(item);
56 return serializableHashSet._set;
60 return _set.GetEnumerator();
63 IEnumerator IEnumerable.GetEnumerator() {
64 return _set.GetEnumerator();
70 HashSet<T> takenValues =
new HashSet<T>();
71 for (
int i = _values.Count; i-- != 0;) {
72 var value = _values[i];
73 if (takenValues.Contains(value)) {
76 takenValues.Add(value);
82 Dictionary<T, int> info =
new Dictionary<T, int>();
84 foreach (var value
in _values) {
89 if (info.ContainsKey(value)) {
96 List<int> dups =
new List<int>();
97 foreach (var value
in _values) {
102 dups.Add(info[value]);
111 if (_values !=
null) {
112 foreach (var value
in _values) {
125 if (_values ==
null) {
126 _values =
new List<T>();
131 for (
int i = _values.Count; i-- != 0;) {
132 T value = _values[i];
137 if (!_set.Contains(value)) {
143 foreach (var value
in _set) {
145 if (!_values.Query().Any(obj => isNull(obj))) {
149 if (!_values.Contains(value)) {
157 _values.AddRange(
this);
161 private bool isNull(
object obj) {
void OnAfterDeserialize()
IEnumerator< T > GetEnumerator()
List< int > GetDuplicationInformation()