是否存在C#的扩展方法库?或分享你自己的

时间:2009-05-28 21:40:32

标签: c# extension-methods boilerplate

  

可能重复:
  Post your extension goodies for C# .Net (codeplex.com/extensionoverflow)

我喜欢C#3.0。我最喜欢的部分之一是扩展方法。

我喜欢将扩展方法视为可应用于广泛类的实用程序函数。我被警告说这个问题是主观的,可能会被关闭,但我认为这是一个很好的问题,因为我们都有“样板”代码来做一些相对静态的代码,比如“用于XML的转义字符串” - 但我还没有找到收集这些的地方。

我对执行日志记录/调试/分析,字符串操作和数据库访问的常用函数特别感兴趣。那里有某些类型的扩展方法库吗?

编辑:将我的代码示例移到答案中。 (感谢Joel清理代码!)

3 个答案:

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