//把一个对象转换成功键值对字典格式

var obj = new { CustomerId = customerId };

var dic = obj.ToDictionray();

public static class ObjectExtension
    {
        public static Dictionary<string, object> ToDictionary(this object obj)
        {
            if (obj == null) return new Dictionary<string, object>();

var element = obj as List<BsonElement>;
            if (element != null)
            {
                return element.ToDictionary(e => e.Name, e => (object)e.Value);
            }
            var doc = obj as QueryDocument;
            if (doc != null)
            {
                return doc.ToDictionary(e => e.Name, e => (object)e.Value);
            }

Dictionary<string, object> objects =
                obj.GetType()
                    .GetProperties()
                    .Where(propertyInfo => propertyInfo.CanRead)
                    .ToDictionary(propertyInfo => propertyInfo.Name,
                        propertyInfo =>
                        {
                            object value = propertyInfo.GetValue(obj,
                                new object[0]);

if (value != null && value.GetType().IsClass &&
                                value.GetType() != typeof (string))
                            {
                                return value.ToDictionary();
                            }
                            return value;
                        });

return objects;
        }
    }

//获取枚举描述方法

Util.GetEnumDescription((Enums.IntegralTypeDetail) 1);

public enum IntegralTypeDetail
    {
        购物积分 = 1,
        投诉补偿 = 2,
        推荐注册奖励 = 3

  }

public static class Util
    {
        private static string _letters = "0123456789";
        private static string _alphanums = "0123456789abcdefghijklmnopqrstuvwxyz";
       
        public static string GetEnumDescription<T>(T value)
        {
            FieldInfo fi = value.GetType().GetField(value.ToString());

DescriptionAttribute[] attributes =
                (DescriptionAttribute[])fi.GetCustomAttributes(
                    typeof(DescriptionAttribute),
                    false
            );

if (attributes != null &&
                attributes.Length > 0)
            {
                return attributes[0].Description;
            }
            else
            {
                return value.ToString();
            }
        }

public static T ParseDescriptionToEnum<T>(string description)
        {
            Array array = Enum.GetValues(typeof(T));
            var list = new List<T>(array.Length);
            for (int i = 0; i < array.Length; i++)
            {
                list.Add((T)array.GetValue(i));
            }

var dict = list.Select(v => new
            {
                Value = v,
                Description = GetEnumDescription(v)
            }
                       )
                           .ToDictionary(x => x.Description, x => x.Value);
            return dict[description];
        }

public static void BindEnum<T>(DropDownList ddl,params int[] ignore) where T:struct
        {
            ddl.Items.Clear();
            ddl.Items.Add(new ListItem("请选择...",""));
            var arr = Enum.GetValues(typeof(T));
            foreach (dynamic v in arr)
            {
                if(ignore!=null&&ignore.Contains((int)v)) continue;
                ddl.Items.Add(new ListItem(GetEnumDescription(v),((int)v).ToString()));
            }
           
        }

public static string GenerateIntegralPwd()
        {
            return GenerateNumString(8);
        }

public static string GenerateNumString(int length)
        {
            return GenerateFrom(length, _letters,false);
        }

public static string GenerateString(int length,bool upper=false)
        {
            return GenerateFrom(length, _alphanums,upper);
        }

static string GenerateFrom(int length,string array,bool upper)
        {
            var sb = new StringBuilder();
            var m = array.Length;
            for (int i = 0; i < length; i++)
            {
                var idx = Guid.NewGuid().GetHashCode()%m;
                idx = Math.Abs(idx);
                sb.Append(array[idx]);
            }
            var ret = sb.ToString();
            if (upper) ret = ret.ToUpper();
            return ret;
        }

public static int ToInt(object obj,int def=0)
        {
            var str = obj == null ? string.Empty : obj.ToString();
            int t;
            if (int.TryParse(str, out t)) return t;
            else return def;
        }

public static decimal ToDecimal(object obj, decimal def = 0)
        {
            var str = obj == null ? string.Empty : obj.ToString();
            return ToDecimal(str);
        }

public static decimal ToDecimal(string str, decimal def = 0)
        {
            decimal t;
            if (decimal.TryParse(str, out t)) return t;
            else return def;
        }

public static bool ToBool(object obj)
        {
            return Convert.ToBoolean(obj);
        }

public static string HtmlAnchor(string onclick, string text, string href = "javascript:void(0)")
        {
            return string.Format("<a href=\"{0}\" onclick=\"{1}\">{2}</a>", href, onclick, text);
        }

public static string CreateLink(string url, Dictionary<string, string> parameters)
        {
            var query = string.Join("&", parameters.Select(d => d.Key + "=" + d.Value));
            return url.Contains("?") ? url + "&" + query : url + "?" + query;
        }

public static string GetMD5(string s, string encoding)
        {
            MD5 md5 = MD5.Create();
            byte[] t = md5.ComputeHash(Encoding.GetEncoding(encoding).GetBytes(s));
            var sb = new StringBuilder(32);
            for (int i = 0; i < t.Length; i++)
            {
                sb.Append(t[i].ToString("x").PadLeft(2, '0'));
            }
            return sb.ToString();
        }

public static string OneOf(params string[] list)
        {
            foreach (var item in list)
            {
                if (!string.IsNullOrEmpty(item)) return item;
            }
            return string.Empty;
        }

public static bool AnyEmpty(params string[] list)
        {
            return list.Any(string.IsNullOrWhiteSpace);
        }

public static bool OneOf(this int v,params int[] list)
        {
            return list.Any(x => x == v);
        }

#region DateTime Util

public static string ToStr(this DateTime? date, string format = "yyyy-MM-dd")
        {
            return date == null ? string.Empty : date.Value.ToString(format);
        }

public static string ToStr(this DateTime date, string format = "yyyy-MM-dd")
        {
            return date.ToString(format);
        }
        #endregion
    }

C#工具类(包含获取枚举描述方法)的更多相关文章

  1. 使用scanner工具类来获取用户输入的信息

    使用scanner工具类来获取用户输入的成绩信息. 步骤:1.导入java.util.Scanner包 2.创建Scanner对象 3.接受并保存用户输入的值 例子:通过用户输入来获取学生成绩 pac ...

  2. java Http消息传递之POST和GET两种方法--通过实用工具类来获取服务器资源

    实现该方法需要导入一些jar包 可以去一下地址下载: http://pan.baidu.com/s/1hqrJF7m /** * 实用工具类来获取服务器资源 * * get方法传送数据 * * 1.通 ...

  3. Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP

    Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP IP 工具类 源代码: /** * <p> * * @author XiaoPengwei ...

  4. 关于通过spring-web的ServletRequestUtils工具类对获取getParameter传参的默认转换基本数据类型的学习

    基于spring-web(4.1.4)包的org.springframework.web.bind.ServletRequestUtils工具类对HttpServletRequest获取的传递入参获取 ...

  5. 时间日期转换工具类,获取当前时间YYYYMMDD24HHMISS、YYYYMMDDHHMISS

    YYYYMMDD24HHMISS:24小时制时间(显示上只是比YYYYMMDDHHMISS中间多了一个24),例:2018102224112440 YYYYMMDDHHMISS:12小时制时间,例20 ...

  6. 时间工具类之"获取相差天数"

    一.时间工具类DateUtils之"获取相差天数" 1 /** 2 * 相差天数 3 * 4 * <p>TODO 方法功能描述 5 * 6 * @param start ...

  7. Java工具类(获取当前主机操作系统名)

    package com.fly.jenkins.util; /** * 操作系统类: 获取System.getProperty("os.name")对应的操作系统 * * @aut ...

  8. Cookie工具类(获取cookie,设置cookie)

    import java.io.UnsupportedEncodingException; import java.net.URLDecoder;import java.net.URLEncoder; ...

  9. 【工具类】获取手机sim卡的运营商

    加入权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" /> package ...

随机推荐

  1. Mono for Android开发调研笔记

    安装完Mono for Android(简称:MonoDroid)之后,可以用MonoDevelop或Visual Studio来开发Mono for Android应用程序:目前只能在模拟器上调试和 ...

  2. 移动应用开发(IOS/android等一下)在一般图像缓存方案评述(附流程图)

    在移动应用开发.我们经常从网络请求到该设备显示遇到的场景图片. 假设多次发动每个请求,废物流.浪费电.: 将图片持久化到磁盘也不失为一种策略:但每次从文件读取图片也存在一定的io开销,就算採用此策略, ...

  3. 返璞归真 asp.net mvc (2) - 路由(System.Web.Routing)

    原文:返璞归真 asp.net mvc (2) - 路由(System.Web.Routing) [索引页] [源码下载] 返璞归真 asp.net mvc (2) - 路由(System.Web.R ...

  4. UI标签库的话题:JEECG智能开发平台 BaseTag(样式表和JS标签的引入)

    UI标签库专题一:JEECG智能开发平台 BaseTag(样式表和JS引入标签) 1.BaseTag(样式表和JS引入标签) 1.1. 演示样例 <t:base type="jquer ...

  5. [渣译文] SignalR 2.0 系列: 支持的平台

    原文:[渣译文] SignalR 2.0 系列: 支持的平台 英文渣水平,大伙凑合着看吧,并不是逐字翻译的…… 这是微软官方SignalR 2.0教程Getting Started with ASP. ...

  6. Apple Swift编程语言入门

    1   简单介绍 今天凌晨Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS&a ...

  7. React-Native入门

    React-Native入门指导之iOS篇 React-Native 入门指导系列教程目录 一.准备工作 (已完成) 二.项目介绍与调试 三.CSS样式与Flex布局 四.常用UI控件的使用 五.JS ...

  8. Ubuntu Linux中开启MySQL远程访问功能

    为了给服务器一个真实的运行环境,今天在内网中部署了一台Ubuntu Linux服务器,其中最头疼的就是MySQL的安装,apt下载更新的速度太慢了,于是就自行编译了一下MySQL的源码,具体的编译方法 ...

  9. Bulk Insert具体订单

    Bulk Insert具体订单 BULK INSERT与用户指定的格式的数据文件复制到数据库表或视图. 语法: BULK INSERT [ [ 'database_name'.][ 'owner' ] ...

  10. Leetcode 实施细节 Rotate Image

    本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie Rotate Image Total Accepted: 15609 Total Submi ...