C#工具类(包含获取枚举描述方法)
//把一个对象转换成功键值对字典格式
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#工具类(包含获取枚举描述方法)的更多相关文章
- 使用scanner工具类来获取用户输入的信息
使用scanner工具类来获取用户输入的成绩信息. 步骤:1.导入java.util.Scanner包 2.创建Scanner对象 3.接受并保存用户输入的值 例子:通过用户输入来获取学生成绩 pac ...
- java Http消息传递之POST和GET两种方法--通过实用工具类来获取服务器资源
实现该方法需要导入一些jar包 可以去一下地址下载: http://pan.baidu.com/s/1hqrJF7m /** * 实用工具类来获取服务器资源 * * get方法传送数据 * * 1.通 ...
- Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP
Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP IP 工具类 源代码: /** * <p> * * @author XiaoPengwei ...
- 关于通过spring-web的ServletRequestUtils工具类对获取getParameter传参的默认转换基本数据类型的学习
基于spring-web(4.1.4)包的org.springframework.web.bind.ServletRequestUtils工具类对HttpServletRequest获取的传递入参获取 ...
- 时间日期转换工具类,获取当前时间YYYYMMDD24HHMISS、YYYYMMDDHHMISS
YYYYMMDD24HHMISS:24小时制时间(显示上只是比YYYYMMDDHHMISS中间多了一个24),例:2018102224112440 YYYYMMDDHHMISS:12小时制时间,例20 ...
- 时间工具类之"获取相差天数"
一.时间工具类DateUtils之"获取相差天数" 1 /** 2 * 相差天数 3 * 4 * <p>TODO 方法功能描述 5 * 6 * @param start ...
- Java工具类(获取当前主机操作系统名)
package com.fly.jenkins.util; /** * 操作系统类: 获取System.getProperty("os.name")对应的操作系统 * * @aut ...
- Cookie工具类(获取cookie,设置cookie)
import java.io.UnsupportedEncodingException; import java.net.URLDecoder;import java.net.URLEncoder; ...
- 【工具类】获取手机sim卡的运营商
加入权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" /> package ...
随机推荐
- 《SAS编程和数据挖掘商业案例》学习笔记# 19
继续<SAS编程与数据挖掘商业案例>学习笔记,本文側重数据处理实践.包含:HASH对象.自己定义format.以及功能强大的正則表達式 一:HASH对象 Hash对象又称散列表,是依据关键 ...
- 无阻塞情况connect生产EINPROGRESS错
今天的游戏开发client测试程序,非常多,因为出现client.后connect成功.代码证recv系统调用.后来发现,可能是由于socket默认模式被阻止,这将使很多client 接处于链接却不能 ...
- iOS 辛格尔顿
单例模式: 为什么使用单例,单例模式的用途是什么?以下我们举一个样例来诠释一下 举个大家都熟知的样例--Windows任务管理器,如图,我们能够做一个这种尝试,在Windows的"任务栏&q ...
- java设计模式演示示例
创建一个模式 1.工厂方法模式(Factory Method) 该程序创建的操作对象,独自一人走出流程,创建产品工厂接口.实际的工作转移到详细的子类.大大提高了系统扩展的柔性,接口的抽象化处理给相互 ...
- 同步(Synchronization)
多线程应用程序的存在,在运行打开一个潜在的多线程安全的接入资源. 两个线程相同的资源可能会以意想不到的方式改变相互干扰. 例如.一个线程可以覆盖有一个线程改变或使应用程序进入一个潜在的无效的状态未知. ...
- ORACLE 实验一
实验一:数据定义 实验学时:4学时 实验类型:综合型 实验要求:必修 一.实验目的 1.熟悉Oracle的client配置: 2.掌握SQL Plus的使用: 3.掌握SQL模式定义语句,定义相关的表 ...
- Java设计模式(三)-修饰模式
我们都知道.能够使用两种方式给一个类或者对象加入行为. 一是使用继承.继承是给一个类加入行为的比較有效的途径.通过使用继承,能够使得子类在拥有自身方法的同一时候,还能够拥有父类的方法.可是使用继承是静 ...
- YUV摘要格式
始终保持视频数据YUV联系,因为基于其产品的组织不同的公司格不同的类型定义,派生出多种不同YUV格公式. 大体,YUV从在点的形式的像素组织中,有两个:1.planer状态.2.packet状态. p ...
- KindEditor参数具体解释
width 编辑器的宽度.能够设置px或%.比textarea输入框样式表宽度优先度高. 数据类型: String 默认值: textarea输入框的宽度 演示样例: K.create('#id', ...
- HTML5 3D翻书效果(双面效应)
最后使用HTML5翻书效果达到测试,比较简单,它的升级版是 最后一个问题: 1)后,原来的页面连环画将成为一面镜子 2)无法实现双面翻书. 3)明显感觉页面似有近遮挡标志. 这次的升级版本号实现过程比 ...