示例#1
0
        public BluedotDictionary(LazyLoadingBehaviour lazyLoading = null, DirtyTrackingBehaviour dirtyTracking = null, ReadOnlyBehaviour readOnly = null, WeakReferenceBehaviour weakReference = null)
        {
            LazyLoading   = lazyLoading;
            DirtyTracking = dirtyTracking;
            ReadOnly      = readOnly;
            WeakReference = weakReference;

            if (LazyLoading != null && LazyLoading.Values)
            {
                _lazyKeys = new HashSet <TKey>();
            }

            if (DirtyTracking != null && DirtyTracking.Values)
            {
                _dirtyKeys = new HashSet <TKey>();
            }

            if (WeakReference != null && WeakReference.Values)
            {
                _weakDictionary = new Dictionary <TKey, WeakReference <TValue> >();
            }
            else
            {
                _strongDictionary = new Dictionary <TKey, TValue>();
            }
        }
示例#2
0
        public static ISet <T> AsReadOnlySet <T>(this ISet <T> set, ReadOnlyBehaviour behaviour = ReadOnlyBehaviour.CreateProxy)
        {
            switch (behaviour)
            {
            case ReadOnlyBehaviour.CastIfPossible:
            case ReadOnlyBehaviour.CreateProxy: return(new SetProxy <T>(set));

            case ReadOnlyBehaviour.CopyElements: return(new SetProxy <T>(new HashSet <T>(set)));

            default: throw new ArgumentException();
            }
        }
示例#3
0
        public static IReadOnlyList <T> AsReadOnly <T>(this IList <T> list, ReadOnlyBehaviour behaviour = ReadOnlyBehaviour.CastIfPossible)
        {
            switch (behaviour)
            {
            case ReadOnlyBehaviour.CastIfPossible: return(list as IReadOnlyList <T> ?? new ListProxy <T>(list));

            case ReadOnlyBehaviour.CreateProxy: return(new ListProxy <T>(list));

            case ReadOnlyBehaviour.CopyElements: return(new List <T>(list));

            default: throw new ArgumentException();
            }
        }
示例#4
0
        public static IReadOnlyCollection <T> AsReadOnly <T>(this ICollection <T> collection, ReadOnlyBehaviour behaviour = ReadOnlyBehaviour.CastIfPossible)
        {
            switch (behaviour)
            {
            case ReadOnlyBehaviour.CastIfPossible: return(collection as IReadOnlyCollection <T> ?? new CollectionProxy <T>(collection));

            case ReadOnlyBehaviour.CreateProxy: return(new CollectionProxy <T>(collection));

            case ReadOnlyBehaviour.CopyElements: return(new List <T>(collection));

            default: throw new ArgumentException();
            }
        }
示例#5
0
        public static IReadOnlyDictionary <TKey, TValue> AsReadOnly <TKey, TValue>(this IDictionary <TKey, TValue> dictionary, ReadOnlyBehaviour behaviour = ReadOnlyBehaviour.CastIfPossible)
        {
            switch (behaviour)
            {
            case ReadOnlyBehaviour.CastIfPossible: return(dictionary as IReadOnlyDictionary <TKey, TValue> ?? new DictionaryProxy <TKey, TValue>(dictionary));

            case ReadOnlyBehaviour.CreateProxy: return(new DictionaryProxy <TKey, TValue>(dictionary));

            case ReadOnlyBehaviour.CopyElements: return(new Dictionary <TKey, TValue>(dictionary));

            default: throw new ArgumentException();
            }
        }