zoukankan      html  css  js  c++  java
  • 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;
            }
        }
    }
  • 相关阅读:
    Java继承关系的父子类中相同的成员变量
    MVC写在Model文件夹下,登录注册等页面定义的变量规则,不会被更新实体模型删除
    手动新建MVC控制器和视图,以及数据显示的问题
    创建简单的MVC项目
    复习i++和++j
    ViewBag的简单使用
    ValidationMessageFor验证
    Cookie的简单使用
    MVC3中 ViewBag、ViewData和TempData的使用和区别
    C#的GridView控件复习
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/6667511.html
Copyright © 2011-2022 走看看