C# 会可能需要的扩展
1. List 转成DataSet
/// <summary>
/// 集合数据转成 DataSet
/// </summary>
/// <typeparam name="TSource"></typeparam>
/// <param name="list"></param>
/// <returns></returns>
public static DataSet ToDataSet<TSource>(this IList<TSource> list)
{
Type elementType = typeof(TSource);
DataSet ds = new DataSet();
DataTable dt = new DataTable();
ds.Tables.Add(dt); foreach (var pi in elementType.GetProperties())
{
Type colType = Nullable.GetUnderlyingType(pi.PropertyType) ?? pi.PropertyType;
dt.Columns.Add(pi.Name, colType);
} foreach (TSource item in list)
{
DataRow row = dt.NewRow();
foreach (var pi in elementType.GetProperties())
{
row[pi.Name] = pi.GetValue(item, null) ?? DBNull.Value;
}
dt.Rows.Add(row);
} return ds;
} public static DataSet ToDataSet<TSource>(this ICollection<TSource> list)
{
Type elementType = typeof(TSource);
DataSet ds = new DataSet();
DataTable dt = new DataTable();
ds.Tables.Add(dt); foreach (var pi in elementType.GetProperties())
{
Type colType = Nullable.GetUnderlyingType(pi.PropertyType) ?? pi.PropertyType;
dt.Columns.Add(pi.Name, colType);
} foreach (TSource item in list)
{
DataRow row = dt.NewRow();
foreach (var pi in elementType.GetProperties())
{
row[pi.Name] = pi.GetValue(item, null) ?? DBNull.Value;
}
dt.Rows.Add(row);
} return ds;
}
2. 枚举扩展函数
/// <summary>
/// 枚举扩展函数
/// <para>把枚举转换成对应的byte 类型,再转换成String</para>
/// </summary>
/// <param name="en"></param>
/// <returns></returns>
public static string ToByteString(this Enum en)
{
return ((byte)(dynamic)en).ToString();
}
3. Md5加密函数
/// <summary>
/// Md5加密函数
/// </summary>
/// <param name="strPwd"></param>
/// <returns></returns>
public static string Encrypt(string strPwd)
{
var md5Hasher = MD5.Create(); var data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(strPwd)); //将字符编码为一个字节序列 var sBuilder = new StringBuilder(); //计算data字节数组的哈希值 foreach (var @byte in data)
{
sBuilder.Append(@byte.ToString("x2"));
} return sBuilder.ToString();
}
4.MVC 扩展
/// <summary>
/// MVC 扩展
/// </summary>
/// <param name="parer">The parer.</param>
/// <param name="subjectType">Type of the subject.</param>
/// <returns></returns>
public static MvcHtmlString MvcHtmlStringExpand(string parer, byte subjectType)
{
var html = "<h3>这是一个扩展方法</h3>"; return MvcHtmlString.Create(html);
}
5.字符串转换成byte
/// <summary>
/// 字符串转换成byte
/// </summary>
/// <param name="val"></param>
/// <returns></returns>
public static byte ToByte(this string val)
{
if (string.IsNullOrEmpty(val))
{
return ;
}
var intVal = int.Parse(val); return (byte)intVal;
}
6.字符串转换成int16
/// <summary>
/// 字符串转换成int16
/// </summary>
/// <param name="val"></param>
/// <returns></returns>
public static short ToInt16(this string val)
{
if (string.IsNullOrEmpty(val))
{
return ;
}
var intVal = int.Parse(val); return (short)intVal;
}
7.字符串是否为空
/// <summary>
/// 字符串是否为空
/// </summary>
/// <param name="val"></param>
/// <returns></returns>
public static bool IsNull(this string val)
{
return string.IsNullOrEmpty(val);
}
8.字符串是不为空,有值状态
/// <summary>
/// 字符串是不为空,有值状态
/// </summary>
/// <param name="val"></param>
/// <returns></returns>
public static bool IsNotNull(this string val)
{
return !string.IsNullOrEmpty(val);
}
C# 会可能需要的扩展的更多相关文章
- 如何开发一个chrome扩展
chrome是一个不错的浏览器,web开发者工作中一般都会使用chrome做为默认浏览器,它有很多扩展,给浏览器补充了各种功能,增强了用户体验.chrome具体能干什么?怎么做出来的呢? chrome ...
- .NET框架设计(常被忽视的C#设计技巧)
阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你的对象如虎添翼(要学会使用扩展方法的设计思 ...
- Phonegap中自定义插件的使用
在phonegap中需要实现特定相关的功能,可能需要自定义扩展一下功能,那么扩展phonegap组件就成为了可能. 源代码结构图: 本文目的在于讲述怎么扩展一个phonegap组件以及实现. 针对ph ...
- 基于 ANSIBLE 自动化运维实践
摘要:运维这个话题很痛苦,你做任何的产品都离不开运维.不管你用什么语言.什么平台.什么技术,真正能够决定你产品成熟度的很有可能就是你运维的能力.取自 云巴 CEO 张虎在 ECUG 大会上的分享. 云 ...
- Android启动过程以及各个镜像的关系
Android启动过程 Android在启动的时候,会由UBOOT传入一个init参数,这个init参数指定了开机的时候第一个运行的程序,默认就是init程序,这个程序在ramdisk.img中.可以 ...
- 修改Unity脚本模板的方法合计
作为一个习惯于偷懒的程序,重复性的无聊内容是最让人无奈的事,就比如我们创建Unity脚本之后,需要手动调整生成的新脚本的格式.编码.内容:如果我们要编写的是编辑器或者服务器端脚本,需要修改的内容就会更 ...
- .NET框架设计—常被忽视的C#设计技巧
.NET框架设计—常被忽视的C#设计技巧 阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你 ...
- 【转载】 .NET框架设计—常被忽视的C#设计技巧
阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你的对象如虎添翼(要学会使用扩展方法的设计思 ...
- 【.NET Core项目实战-统一认证平台】第二章网关篇-定制Ocelot来满足需求
[.NET Core项目实战-统一认证平台]开篇及目录索引 这篇文章,我们将从Ocelot的中间件源码分析,目前Ocelot已经实现那些功能,还有那些功能在我们实际项目中暂时还未实现,如果我们要使用这 ...
随机推荐
- POJ 2976
http://poj.org/problem?id=2976 01分数规划问题,可以舍掉k组 01分数规划用于解决的经典问题是最优比率生成树 解法见http://www.cnblogs.com/lot ...
- CentOS7.1配置源
现在网上最新的是CentOS7.1, 但是在配置国内流行的163源的时候,网上的文章大多数我这里都通不过. 错误信息大概是: One of the configured repositories fa ...
- document与window的区别
[window对象] 它是一个顶层对象,而不是另一个对象的属性,即浏览器的窗口. 属性 defaultStatus 缺省的状态条消息 document 当前显示的文档(该属性本身也是一个对象) fra ...
- Collections.reverse 代码思考-超越昨天的自己系列(13)
点进Collections.reverse的代码瞄了眼,然后就开始了一些基础知识的收集. 现在发现知道的越多,知道不知道的越多. 列几个记录下: reverse方法源码: /** * Reverses ...
- PARSEC-3.0编译错误
OS: Ubuntu 14.04 LTS (x86_64) ***error 1 OpenSSL 1.0.1e 与 perl5.18 不兼容 POD document had syntax error ...
- solr+mongo-connector+mongdb+tomcat集成
话题:solr安装 一.下载solr 本例采用4.10.3版本. Solr所有版本下载地址:http://archive.apache.org/dist/lucene/solr/ 下载完成后,解压的目 ...
- Java Concurrent之 AbstractQueuedSynchronizer
ReentrantLock/CountDownLatch/Semaphore/FutureTask/ThreadPoolExecutor的源码中都会包含一个静态的内部类Sync,它继承了Abstrac ...
- IntelliJ IDEA 的 20 个代码自动完成的特性
http://www.oschina.net/question/12_70799 在这篇文章中,我想向您展示 IntelliJ IDEA 中最棒的 20 个代码自动完成的特性,可让 Java 编码变得 ...
- Unity5 AssetBundle
设置assetBundleName AssetImporter importer = AssetImporter.GetAtPath(p); importer.assetBundleName = x; ...
- go异常处理
go的异常处理通过defer,panic,recover这3个流程来达到(defer是关键字,后2者是函数) (1)异常的捕获通常放在函数最末,也就是defer里面 (2)panci抛出异常 (3)r ...