是否存在C#的扩展方法库?

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));
}