.net 开发常用扩展方法总结

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Data;
  4 using System.IO;
  5 using System.Linq;
  6 using System.Reflection;
  7 using System.Runtime.Serialization.Formatters.Binary;
  8 using System.Text;
  9 using System.Text.RegularExpressions;
 10 using System.Xml;
 11 using System.Xml.Linq;
 12 using System.Xml.Serialization;
 13
 14 namespace FrameWork.Utilities.Extension
 15 {
 16     /// <summary>
 17     /// 常用枚举
 18     /// </summary>
 19     public static class HibityExtension
 20     {
 21         #region 第一天最后一天
 22
 23         /// <summary>
 24         ///     第一天
 25         /// </summary>
 26         /// <param name="current"></param>
 27         /// <returns></returns>
 28         public static DateTime First(this DateTime current)
 29         {
 30             var first = current.AddDays(1 - current.Day);
 31             return first;
 32         }
 33
 34         /// <summary>
 35         ///     最后一天
 36         /// </summary>
 37         /// <param name="current"></param>
 38         /// <returns></returns>
 39         public static DateTime Last(this DateTime current)
 40         {
 41             var daysInMonth = DateTime.DaysInMonth(current.Year, current.Month);
 42             var last = current.First().AddDays(daysInMonth - 1);
 43             return last;
 44         }
 45
 46         #endregion
 47
 48         #region 字符串是否为空
 49
 50         /// <summary>
 51         ///     字符串是否为空
 52         /// </summary>
 53         /// <param name="s"></param>
 54         /// <returns></returns>
 55         public static bool IsEmpty(this string s)
 56         {
 57             return string.IsNullOrWhiteSpace(s);
 58         }
 59
 60         #endregion
 61
 62         #region 将指定字符串中的格式项替换为指定数组中相应对象的字符串表示形式
 63
 64         /// <summary>
 65         ///     将指定字符串中的格式项替换为指定数组中相应对象的字符串表示形式。
 66         /// </summary>
 67         /// <param name="format"></param>
 68         /// <param name="args"></param>
 69         /// <returns></returns>
 70         public static string FormatWith(this string format, params object[] args)
 71         {
 72             return string.Format(format, args);
 73         }
 74
 75         #endregion
 76
 77         #region 指示所指定的正则表达式在指定的输入字符串中是否找到了匹配项
 78
 79         /// <summary>
 80         ///     指示所指定的正则表达式在指定的输入字符串中是否找到了匹配项。
 81         /// </summary>
 82         /// <param name="s"></param>
 83         /// <param name="pattern"></param>
 84         /// <returns></returns>
 85         public static bool IsMatch(this string s, string pattern)
 86         {
 87             return s != null && Regex.IsMatch(s, pattern);
 88         }
 89
 90         #endregion
 91
 92         #region 验证邮箱
 93
 94         /// <summary>
 95         ///     验证邮箱
 96         /// </summary>
 97         /// <param name="source"></param>
 98         /// <returns></returns>
 99         public static bool IsEmail(string source)
100         {
101             return Regex.IsMatch(source,
102                 @"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$",
103                 RegexOptions.IgnoreCase);
104         }
105
106         #endregion
107
108         #region String True Or False 转 bool
109
110         public static bool ToBool(this string value)
111         {
112             if (string.IsNullOrWhiteSpace(value)) return false;
113             return value.ToLower() == "true";
114         }
115
116         #endregion
117
118         #region 比较字符串
119
120         /// <summary>
121         ///     比较两个字符串在忽略大小写的情况下是否相等
122         /// </summary>
123         /// <param name="value">字符串1</param>
124         /// <param name="compareTo">要比较的字符串</param>
125         /// <returns>是否相等</returns>
126         public static bool IsIgnoreCaseEqualTo(this string value, string compareTo)
127         {
128             return string.Compare(value, compareTo, StringComparison.OrdinalIgnoreCase) == 0;
129         }
130
131         #endregion
132
133         #region String.Join
134
135         /// <summary>
136         ///     using the specified separator between each
137         /// </summary>
138         /// <param name="source"></param>
139         /// <param name="separator"></param>
140         /// <returns></returns>
141         public static string Join(this IEnumerable<string> source, string separator)
142         {
143             return string.Join(separator, source);
144         }
145
146         #endregion
147
148         #region string转枚举对象
149
150         /// <summary>
151         ///     string转枚举对象
152         /// </summary>
153         /// <typeparam name="T"></typeparam>
154         /// <param name="value"></param>
155         /// <returns></returns>
156         public static T ToEnum<T>(this string value)
157             where T : struct
158         {
159             return (T) Enum.Parse(typeof (T), value, true);
160         }
161
162         #endregion
163
164         #region MD5
165
166         /// <summary>
167         ///     计算指定字符串的MD5值
168         /// </summary>
169         /// <param name="key">要计算Hash的字符串</param>
170         /// <returns>字符串的Hash</returns>
171         public static string MD5(this string key)
172         {
173             return key.MD5(Encoding.UTF8);
174         }
175
176         /// <summary>
177         ///     计算指定字符串的MD5值
178         /// </summary>
179         /// <param name="key">要计算Hash的字符串</param>
180         /// <param name="encoding">计算Hash的编码方法</param>
181         /// <returns>字符串的Hash</returns>
182         public static string MD5(this string key, string encoding)
183         {
184             return key.MD5(Encoding.GetEncoding(encoding));
185         }
186
187         /// <summary>
188         ///     计算指定字符串的MD5值
189         /// </summary>
190         /// <param name="key">要计算Hash的字符串</param>
191         /// <param name="encoding">计算Hash的编码方法</param>
192         /// <returns>字符串的Hash</returns>
193         public static string MD5(this string key, Encoding encoding)
194         {
195             if (key == null) throw new ArgumentNullException();
196
197             var md5 = System.Security.Cryptography.MD5.Create();
198             var has = md5.ComputeHash(encoding.GetBytes(key));
199             return BitConverter.ToString(has).Replace("-", "").ToUpper();
200         }
201
202         #endregion
203
204         #region 枚举转list对象
205
206         public static List<T> EnumToList<T>()
207         {
208             var enumType = typeof (T);
209
210             // Can‘t use type constraints on value types, so have to do check like this
211             if (enumType.BaseType != typeof (Enum))
212                 throw new ArgumentException("T must be of type System.Enum");
213
214             var enumValArray = Enum.GetValues(enumType);
215
216             var enumValList = new List<T>(enumValArray.Length);
217             enumValList.AddRange(from int val in enumValArray select (T) Enum.Parse(enumType, val.ToString()));
218             return enumValList;
219         }
220
221         #endregion
222
223         #region 枚举转字典对象
224
225         public static IDictionary<string, int> EnumToDictionary(this Type t)
226         {
227             if (t == null) throw new NullReferenceException();
228             if (!t.IsEnum) throw new InvalidCastException("object is not an Enumeration");
229
230             var names = Enum.GetNames(t);
231             var values = Enum.GetValues(t);
232
233             return (from i in Enumerable.Range(0, names.Length)
234                 select new {Key = names[i], Value = (int) values.GetValue(i)})
235                 .ToDictionary(k => k.Key, k => k.Value);
236         }
237
238         #endregion
239
240         #region 序列化反序列化xml
241
242         /// <summary>
243         ///     序列化成UTF8 格式的无命名空间的xml
244         /// </summary>
245         /// <param name="root"></param>
246         /// <returns></returns>
247         public static string ToXml<T>(this T root) where T : new()
248         {
249             var stream = new MemoryStream();
250             var xml = new XmlSerializer(typeof (T));
251             var xwriter = new XmlTextWriter(stream, Encoding.UTF8);
252             //Create our own namespaces for the output
253             var ns = new XmlSerializerNamespaces();
254             //Add an empty namespace and empty value
255             ns.Add("", "");
256             try
257             {
258                 //序列化对象
259                 xml.Serialize(xwriter, root, ns);
260             }
261             catch (InvalidOperationException)
262             {
263                 throw;
264             }
265             stream.Position = 0;
266             var sr = new StreamReader(stream);
267             var str = sr.ReadToEnd();
268             sr.Dispose();
269             stream.Dispose();
270             return str;
271         }
272
273         /// <summary>
274         ///     反序列成对象
275         /// </summary>
276         /// <param name="xml">xml</param>
277         /// <returns></returns>
278         public static object FromXml<T>(this string xml) where T : new()
279         {
280             using (var sr = new StringReader(xml))
281             {
282                 var xmldes = new XmlSerializer(typeof (T));
283                 return (T) xmldes.Deserialize(sr);
284             }
285         }
286
287         public static T Deserialize<T>(this XDocument xmlDocument)
288         {
289             var xmlSerializer = new XmlSerializer(typeof (T));
290             using (var reader = xmlDocument.CreateReader())
291                 return (T) xmlSerializer.Deserialize(reader);
292         }
293
294         #endregion
295
296         #region DataTable转list ,list 转DataTable
297
298         public static DataTable ToDataTable<T>(this IEnumerable<T> varlist)
299         {
300             var dtReturn = new DataTable();
301             // column names
302             PropertyInfo[] oProps = null;
303             if (varlist == null) return dtReturn;
304             foreach (var rec in varlist)
305             {
306                 // Use reflection to get property names, to create table, Only first time, others will follow
307                 if (oProps == null)
308                 {
309                     oProps = rec.GetType().GetProperties();
310                     foreach (var pi in oProps)
311                     {
312                         var colType = pi.PropertyType;
313                         if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof (Nullable<>)))
314                         {
315                             colType = colType.GetGenericArguments()[0];
316                         }
317                         dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
318                     }
319                 }
320                 var dr = dtReturn.NewRow();
321                 foreach (var pi in oProps)
322                 {
323                     dr[pi.Name] = pi.GetValue(rec, null) ?? DBNull.Value;
324                 }
325                 dtReturn.Rows.Add(dr);
326             }
327             return dtReturn;
328         }
329
330         public static List<T> ToList<T>(this DataTable table) where T : class, new()
331         {
332             try
333             {
334                 var list = new List<T>();
335
336                 foreach (var row in table.AsEnumerable())
337                 {
338                     var obj = new T();
339
340                     foreach (var prop in obj.GetType().GetProperties())
341                     {
342                         try
343                         {
344                             var propertyInfo = obj.GetType().GetProperty(prop.Name);
345                             propertyInfo.SetValue(obj, Convert.ChangeType(row[prop.Name], propertyInfo.PropertyType),
346                                 null);
347                         }
348                         catch
349                         {
350                             ;
351                         }
352                     }
353
354                     list.Add(obj);
355                 }
356
357                 return list;
358             }
359             catch
360             {
361                 return null;
362             }
363         }
364
365         #endregion
366
367         #region int类型比较
368
369         public static bool Between<T>(this T me, T lower, T upper) where T : IComparable<T>
370         {
371             return me.CompareTo(lower) >= 0 && me.CompareTo(upper) < 0;
372         }
373
374         public static T Max<T>(T value1, T value2) where T : IComparable
375         {
376             return value1.CompareTo(value2) > 0 ? value1 : value2;
377         }
378
379         public static decimal PercentOf(this double position, int total)
380         {
381             decimal result = 0;
382             if (position > 0 && total > 0)
383                 result = (decimal) position/total*100;
384             return result;
385         }
386
387         public static decimal? ToDecimal(this object obj)
388         {
389             decimal result = 0;
390             if (obj == null) return null;
391
392             if (decimal.TryParse(obj.ToString(), out result))
393                 return result;
394             return null;
395         }
396
397         #endregion
398
399         #region 克隆一个对象
400
401         /// <summary>
402         ///     克隆一个对象
403         /// </summary>
404         /// <typeparam name="T"></typeparam>
405         /// <param name="item"></param>
406         /// <returns></returns>
407         public static T Clone<T>(this object item)
408         {
409             if (item == null) return default(T);
410             var formatter = new BinaryFormatter();
411             var stream = new MemoryStream();
412             formatter.Serialize(stream, item);
413             stream.Seek(0, SeekOrigin.Begin);
414             var result = (T) formatter.Deserialize(stream);
415             stream.Close();
416             return result;
417         }
418
419         #endregion
420
421         #region 转换成指定类型的对象
422
423         public static T To<T>(this IConvertible value)
424         {
425             try
426             {
427                 var t = typeof (T);
428                 var u = Nullable.GetUnderlyingType(t);
429
430                 if (u != null)
431                 {
432                     if (value == null || value.Equals(""))
433                         return default(T);
434
435                     return (T) Convert.ChangeType(value, u);
436                 }
437                 if (value == null || value.Equals(""))
438                     return default(T);
439
440                 return (T) Convert.ChangeType(value, t);
441             }
442
443             catch
444             {
445                 return default(T);
446             }
447         }
448
449         #endregion
450     }
451 }
时间: 2024-10-08 05:13:35

.net 开发常用扩展方法总结的相关文章

Sublime Text 前端开发常用扩展插件推荐

Sublime Text 前端开发常用扩展插件推荐 Sublime Text Sublime Text 是程序员们公认的编码神奇,拥有漂亮的用户界面和强大的功能 更重要的是,Sublime Text 易于扩展,众多开发人员为其贡献插件,而且通过包管理工具 —— Package Control 可以方便安装和管理. Package Control 安装方法 首先通过快捷键 ctrl+` 或者 View > Show Console 打开控制台,然后粘贴相应的 Python 安装代码. Sublim

LINQ常用扩展方法

下面的方法都是IEnumerable<T>的扩展方法: Average计算平均值: Min最小元素:Max最大元素:Sum元素总和: Count元素数量: Concat连接两个序列://Unoin all Contains序列是否包含指定元素: Distinct取得序列中的非重复元素: Except获得两个序列的差集: Intersect获得两个序列的交集: First取得序列第一个元素: Single取得序列的唯一一个元素,如果元素个数不是1个,则报错:!!!严谨的程序. FirstOrDe

Javascript 常用扩展方法

这篇文章纯粹是为了保存这些方法,供以后翻阅,其实一直保存在 evernote 里面,但觉得还是放到对的地方会好点. 现在收录的很少,希望以后会慢慢增多. 数组扩展 contains,remove 扩展 1 function ArrayContains(array, obj) { 2 for (var i = 0; i < array.length; i++) { 3 if (array[i] === obj) { 4 return true ; 5 } 6 } 7 return false ;

WebAPi添加常用扩展方法及思维发散

WebAPi常用扩展方法 (1)获取所有键值对         /// <summary>         /// 获取所有键值        /// </summary>         /// <param name="request"></param>         /// <returns></returns>         public static Dictionary<string, str

IOS-UITableView开发常用各种方法总结

实现列表有两种方式 方式一 继承UIViewController,实现UITableViewDataSource和UITableViewDelegate协议.声明UITableView. UserInfoViewController.h @interface UserInfoViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>{ } @end UserInfoViewController.m @

C# 常用扩展方法

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CommonSD { public static class MyExtensions { public static void DisplayDefiningAssembly(this object obj) // { //Console.WriteLine("{0} lives here:=> {

Farseer.net轻量级开源框架 中级篇:常用的扩展方法

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: BasePage.BaseController.BaseHandler.BaseMasterPage.BaseControls基类使用 下一篇:Farseer.net轻量级开源框架 中级篇: 常用工具 在使用框架的时候,都需要引用扩展方法的命名空间:using FS.Extend; 1 /// <summary> 2 /// 将值转换成类型对像的值(此方法作为公共的调用,只支持

ASP.Net MVC开发基础学习笔记(2):HtmlHelper与扩展方法

一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归.所以抛弃之前的那种事件响应的模型,抛弃服务器端控件也理所当然. 但是,如果手写Html标签效率又比较低,可重用度比较低.这时,我们该怎样来提高效率呢?首先,经过上篇我们知道可以通过ViewData传递数据,于是我们可以写出以下的Html代码: 1 <input name="UserName&q

ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法

一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归.所以抛弃之前的那种事件响应的模型,抛弃服务器端控件也理所当然. 但是,如果手写Html标签效率又比较低,可重用度比较低.这时,我们该怎样来提高效率呢?首先,经过上篇我们知道可以通过ViewData传递数据,于是我们可以写出以下的Html代码: <input name="UserName&quo