Is there an existing library of extension methods for C#? or share your own
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Post your extension goodies for C# .Net (codeplex.com/extensionoverflow)
号
我喜欢C 3.0。我最喜欢的部分之一是扩展方法。
我喜欢把扩展方法看作可以应用于广泛类基础的实用函数。我被警告说这个问题是主观的,可能会被关闭,但我认为这是一个很好的问题,因为我们都有"样板"代码来做一些相对静态的事情,比如"XML的转义字符串",但是我还没有找到一个地方来收集这些内容。
我对执行日志记录/调试/分析、字符串操作和数据库访问的常见函数特别感兴趣。有没有这些类型的扩展方法库?
编辑:将我的代码示例移到一个答案。(感谢乔尔清理代码!)
你可能喜欢MiscUtil。
而且,很多人都喜欢这个:
1 2 3 4 | public static bool IsNullOrEmpty(this string s) { return s == null || s.Length == 0; } |
但是,由于10次或更多次中有9次我检查它是否为空,我个人使用它:
1 2 3 4 | public static bool HasValue(this string s) { return s != null && s.Length > 0; } |
号
最后,我最近发现的一个:
1 2 3 4 | public static bool IsDefault<T>(this T val) { return EqualityComparer<T>.Default.Equals(val, default(T)); } |
用于检查两种值类型(如datetime、bool或integer)的默认值,或检查引用类型(如string)的空值。它甚至适用于物体,有点怪异。
这是我的一对:
1 2 3 4 5 6 7 8 | // returns the number of milliseconds since Jan 1, 1970 (useful for converting C# dates to JS dates) public static double UnixTicks(this DateTime dt) { DateTime d1 = new DateTime(1970, 1, 1); DateTime d2 = dt.ToUniversalTime(); TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks); return ts.TotalMilliseconds; } |
。
以及一个todelimitedstring函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | // apply this extension to any generic IEnumerable object. public static string ToDelimitedString<T>(this IEnumerable<T> source, string delimiter, Func<T, string> action) { if (source == null) { throw new ArgumentException("Source can not be null."); } if (delimiter == null) { throw new ArgumentException("Delimiter can not be null."); } string strAction = string.Empty; string delim = string.Empty; var sb = new StringBuilder(); foreach (var item in source) { strAction = action.Invoke(item); sb.Append(delim); sb.Append(strAction); delim = delimiter; } return sb.ToString(); } |
以下是Jeff使用字符串编写的Todelimitdstring。联接:
1 2 3 4 5 | public static string ToDelimitedString<T>(this IEnumerable<T> source, string delimiter, Func<T, string> action) { // guard clauses for arguments omitted for brevity return String.Join(delimiter, source.Select(action)); } |
。