首页 > 代码库 > .net 开发常用扩展方法总结
.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 #endregion107 108 #region String True Or False 转 bool109 110 public static bool ToBool(this string value)111 {112 if (string.IsNullOrWhiteSpace(value)) return false;113 return value.ToLower() == "true";114 }115 116 #endregion117 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 #endregion132 133 #region String.Join134 135 /// <summary>136 /// using the specified separator between each137 /// </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 #endregion147 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 : struct158 {159 return (T) Enum.Parse(typeof (T), value, true);160 }161 162 #endregion163 164 #region MD5165 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 #endregion203 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 this211 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 #endregion222 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 = http://www.mamicode.com/(int) values.GetValue(i)})235 .ToDictionary(k => k.Key, k => k.Value);236 }237 238 #endregion239 240 #region 序列化反序列化xml241 242 /// <summary>243 /// 序列化成UTF8 格式的无命名空间的xml244 /// </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 output253 var ns = new XmlSerializerNamespaces();254 //Add an empty namespace and empty value255 ns.Add("", "");256 try257 {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 #endregion295 296 #region DataTable转list ,list 转DataTable297 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 try333 {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 try343 {344 var propertyInfo = obj.GetType().GetProperty(prop.Name);345 propertyInfo.SetValue(obj, Convert.ChangeType(row[prop.Name], propertyInfo.PropertyType),346 null);347 }348 catch349 {350 ;351 }352 }353 354 list.Add(obj);355 }356 357 return list;358 }359 catch360 {361 return null;362 }363 }364 365 #endregion366 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 : IComparable375 {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 #endregion398 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 #endregion420 421 #region 转换成指定类型的对象422 423 public static T To<T>(this IConvertible value)424 {425 try426 {427 var t = typeof (T);428 var u = Nullable.GetUnderlyingType(t);429 430 if (u != null)431 {432 if (value =http://www.mamicode.com/= null || value.Equals(""))433 return default(T);434 435 return (T) Convert.ChangeType(value, u);436 }437 if (value =http://www.mamicode.com/= null || value.Equals(""))438 return default(T);439 440 return (T) Convert.ChangeType(value, t);441 }442 443 catch444 {445 return default(T);446 }447 }448 449 #endregion450 }451 }
.net 开发常用扩展方法总结
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。