C#工具类之字典扩展类

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

namespace G2.Utils
{
    /// <summary>
    /// 字典帮助类
    /// </summary>
    public static class DictionaryHelper
    {
        /// <summary>
        /// 字典排序(默认排序)
        /// </summary>
        /// <typeparam name="TKey">Key类型</typeparam>
        /// <typeparam name="TValue">Value类型</typeparam>
        /// <param name="dictionary">无序字典</param>
        /// <returns>有序字典</returns>
        public static IDictionary<TKey, TValue> Sort<TKey, TValue>(this IDictionary<TKey, TValue> dictionary)
        {
            if (dictionary == null)
            {
                throw new ArgumentNullException("字典为空,不能排序");
            }

            return new SortedDictionary<TKey, TValue>(dictionary);
        }

        /// <summary>
        /// 字典排序(自定义排序)
        /// </summary>
        /// <typeparam name="TKey">Key类型</typeparam>
        /// <typeparam name="TValue">Value类型</typeparam>
        /// <param name="dictionary">无序字典</param>
        /// <param name="comparer">自定义排序方法</param>
        /// <returns>有序字典</returns>
        public static IDictionary<TKey, TValue> Sort<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, IComparer<TKey> comparer)
        {
            if (dictionary == null)
            {
                throw new ArgumentNullException("字典为空,不能排序");
            }

            if (comparer == null)
            {
                throw new ArgumentNullException("自定义排序方法为空,不能排序");
            }

            return new SortedDictionary<TKey, TValue>(dictionary, comparer);
        }

        /// <summary>
        /// 字典排序(依据值默认排序)
        /// </summary>
        /// <typeparam name="TKey">Key类型</typeparam>
        /// <typeparam name="TValue">Value类型</typeparam>
        /// <param name="dictionary">无序字典</param>
        /// <returns>有序字典</returns>
        public static IDictionary<TKey, TValue> SortByValue<TKey, TValue>(this IDictionary<TKey, TValue> dictionary)
        {
            return dictionary.OrderBy(v => v.Value).ToDictionary(item => item.Key, item => item.Value);
        }

        /// <summary>
        /// 字典排序(依据值自定义排序)
        /// </summary>
        /// <typeparam name="TKey">Key类型</typeparam>
        /// <typeparam name="TValue">Value类型</typeparam>
        /// <param name="dictionary">无序字典</param>
        /// <param name="comparer">自定义排序方法</param>
        /// <returns>有序字典</returns>
        public static IDictionary<TKey, TValue> SortByValue<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, IComparer<TValue> comparer)
        {
            return dictionary.OrderBy(v => v.Value, comparer).ToDictionary(item => item.Key, item => item.Value);
        }

        /// <summary>
        /// 判断字典是否为空或者无数据
        /// </summary>
        /// <param name="dictionary">字典</param>
        /// <returns>True:字典为空或没有数据;否则为False</returns>
        public static bool IsEmpty<TKey, TValue>(this IDictionary<TKey, TValue> dictionary)
        {
            if (dictionary == null)
            {
                throw new ArgumentNullException("字典为空");
            }

            return dictionary.Count == 0;
        }

        /// <summary>
        /// 判断字典是否为空或者无数据
        /// </summary>
        /// <param name="dictionary">字典</param>
        /// <returns>True:字典为空或没有数据;否则为False</returns>
        public static bool IsNullOrEmpty<TKey, TValue>(this IDictionary<TKey, TValue> dictionary)
        {
            return dictionary == null || dictionary.Count == 0;
        }

        /// <summary>
        /// 获取字典值(如果不包含该值则由自定义方法返回)
        /// </summary>
        /// <typeparam name="TKey">Key类型</typeparam>
        /// <typeparam name="TValue">Value类型</typeparam>
        /// <param name="dictionary">字典</param>
        /// <param name="key">Key值</param>
        /// <param name="function">自定义方法</param>
        /// <returns>字典里的值或者自定义方法返回值</returns>
        public static TValue GetOrGetByFunction<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, Func<TValue> function)
        {
            if (dictionary == null)
            {
                throw new ArgumentNullException("字典为空");
            }

            if (dictionary.ContainsKey(key))
            {
                return dictionary[key];
            }

            if (function == null)
            {
                throw new ArgumentNullException("自定义取值方法为空,不能获取值");
            }

            return function();
        }

        /// <summary>
        /// 新增或重写(如果没有该Key值,则新增;否则重写该值)
        /// </summary>
        /// <typeparam name="TKey">Key类型</typeparam>
        /// <typeparam name="TValue">Value类型</typeparam>
        /// <param name="dictionary">字典</param>
        /// <param name="key">Key值</param>
        /// <param name="value">Value新值</param>
        /// <returns>字典</returns>
        public static IDictionary<TKey, TValue> AddOrSet<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)
        {
            if (dictionary == null)
            {
                throw new ArgumentNullException("字典为空");
            }

            if (dictionary.ContainsKey(key))
            {
                dictionary[key] = value;
            }
            else
            {
                dictionary.Add(new KeyValuePair<TKey, TValue>(key, value));
            }

            return dictionary;
        }
    }
}
原文地址:https://www.cnblogs.com/zhshlimi/p/6667511.html