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已经实现那些功能,还有那些功能在我们实际项目中暂时还未实现,如果我们要使用这 ...
随机推荐
- codeforces 723D(DFS)
题目链接:http://codeforces.com/problemset/problem/723/D 题意:n*m的矩阵中,'*'代表陆地,'.'代表水,连在一起且不沿海的水形成湖泊.问最少填多少块 ...
- Rally的敏捷小册子
来自为知笔记(Wiz)
- Keychain group access
Keychain group access Apr 3, 2010 · 3 minute read · Comments keychain Since iPhone OS 3.0 it has bee ...
- C#多线程线程
“线程同步”的含义 当一个进程启动了多个线程时,如果需要控制这些线程的推进顺序(比如A线程必须等待B和C线程执行完毕之后才能继续执行),则称这些线程需要进行“线程同步(thread synchro ...
- Chp11 11.7
<Java语言程序设计>P327 题目要求使用数组来模拟实现ArrayList的一些方法,并要求可以根据实际长度来实现数组自动增长,这里只贴出LikeArrayList.java 测试方法 ...
- Swift—泛型(上)
1.泛型 泛型是一种非常灵活的语法,允许程序在函数.枚举.结构体.类中定义类型形参,这种类型形参实际代表的类型是动态改变的——程序可以等到真正使用这些函数.枚举.结构体.类时才为这些类型形参传入实际的 ...
- 第七章 LED将为我们闪烁:控制发光二极管
第七章 LED将为我们闪烁:控制发光二极管 本章我们将会看到一个完整的linux驱动程序,通过linux驱动程序控制LED的四个小灯,通俗的说就是通过向linux驱动程序来控制LED小灯的开关.用到 ...
- asdddddddddddddddd
<a href="www.baidu.com">sad</a>
- C#的提交表单方式主要有两种WebClient与HttpWebRequest
根据黄聪:C#模拟网站页面POST数据提交表单(转) using System; using System.Collections.Generic; using System.IO; using Sy ...
- jquery设置下拉菜单
jQuery代码 1,引用jQuery库 2,show方法 3,hide方法 <script type="text/javascript"> $function(){ ...