5

可能重复:
发布 C# .Net 的扩展好东西 (codeplex.com/extensionoverflow)

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

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

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

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

4

3 回答 3

6

您可能会喜欢MiscUtil

还有很多人喜欢这个:

public static bool IsNullOrEmpty(this string s)
{
    return s == null || s.Length == 0;
}

但由于 10 次或更多次中有 9 次我正在检查它是否为或空,我个人使用这个:

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 或 integer 等值类型的默认值,或 null 等引用类型。它甚至适用于物体,这有点令人毛骨悚然。

于 2009-05-28T21:58:14.213 回答
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();
}
于 2009-05-28T22:19:56.433 回答
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));
}
于 2009-05-28T22:34:15.890 回答