﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace System
{
    public static class CollectionExtensions
    {
        public static T[] OrEmpty<T>(this T[] array)
        {
            return array ?? new T[0];
        }

        public static List<T> OrEmpty<T>(this List<T> list)
        {
            return list ?? new List<T>();
        }

        public static Queue<T> OrEmpty<T>(this Queue<T> queue)
        {
            return queue ?? new Queue<T>();
        }

        public static IEnumerable<T> OrEmpty<T>(this IEnumerable<T> value)
        {
            return value ?? Enumerable.Empty<T>();
        }

        public static Dictionary<K, V> OrEmpty<K, V>(this Dictionary<K, V> value)
        {
            return value ?? new Dictionary<K, V>();
        }

        public static HashSet<T> OrEmpty<T>(this HashSet<T> value, IEqualityComparer<T> comparer = null)
        {
            return value ?? new HashSet<T>(comparer ?? EqualityComparer<T>.Default);
        }

        public static Stack<T> OrEmpty<T>(this Stack<T> value)
        {
            return value ?? new Stack<T>();
        }

    }
}
