可能重复:
Post your extension goodies for C# .Net (codeplex.com/extensionoverflow)
我喜欢C#3.0。我最喜欢的部分之一是扩展方法。
我喜欢将扩展方法视为可应用于广泛类的实用程序函数。我被警告说这个问题是主观的,可能会被关闭,但我认为这是一个很好的问题,因为我们都有“样板”代码来做一些相对静态的代码,比如“用于XML的转义字符串” - 但我还没有找到收集这些的地方。
我对执行日志记录/调试/分析,字符串操作和数据库访问的常用函数特别感兴趣。那里有某些类型的扩展方法库吗?
编辑:将我的代码示例移到答案中。 (感谢Joel清理代码!)
答案 0 :(得分:6)
您可能会喜欢MiscUtil。
此外,很多人都喜欢这个:
public static bool IsNullOrEmpty(this string s)
{
return s == null || s.Length == 0;
}
但是由于10次或更多次中的9次我正在检查不 null或为空,我个人使用此:
public static bool HasValue(this string s)
{
return s != null && s.Length > 0;
}
最后,我刚刚拿起一个:
public static bool IsDefault<T>(this T val)
{
return EqualityComparer<T>.Default.Equals(val, default(T));
}
用于检查值类型(如DateTime,bool或整数)的默认值,或引用类型(如string for null)。它甚至适用于物体,这有点怪异。
答案 1 :(得分:3)
这是我的几个:
// 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函数:
// 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();
}
答案 2 :(得分:2)
这是使用String.Join编写的Jeff的ToDelimitedString:
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));
}