5 votes

Y a-t-il une bibliothèque existante de méthodes d'extension pour C#? ou partagez la vôtre

Possible Duplicate:
Publiez vos goodies d'extension pour C# .Net (codeplex.com/extensionoverflow)

Je suis un grand adepte du C# 3.0. Une de mes parties préférées est les méthodes d'extension.

J'aime penser aux méthodes d'extension comme des fonctions utilitaires qui peuvent s'appliquer à une large base de classes. On me prévient que cette question est subjective et risque d'être fermée, mais je pense que c'est une bonne question, car nous avons tous du code "boilerplate" pour faire quelque chose de relativement statique comme "échapper une chaîne pour XML" - mais je n'ai pas encore trouvé d'endroit pour les rassembler.

Je m'intéresse particulièrement aux fonctions communes qui effectuent le journalisation/débogage/profilage, la manipulation de chaînes, et l'accès aux bases de données. Existe-t-il une bibliothèque de ce type de méthodes d'extension quelque part?

Modifier : j'ai déplacé mes exemples de code dans une réponse. (Merci Joel d'avoir nettoyé le code!)

6voto

Joel Coehoorn Points 190579

Vous pourriez aimer MiscUtil.

Aussi, beaucoup de gens aiment celui-ci :

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

mais comme 9 fois sur 10 ou plus je vérifie que ce n'est pas null ou vide, je personnellement utilise ceci :

public static bool HasValue(this string s)
{
    return s != null && s.Length > 0;
}

Enfin, un que j'ai appris récemment :

public static bool IsDefault(this T val)
{
    return EqualityComparer.Default.Equals(val, default(T));
}

Fonctionne pour vérifier à la fois les types de valeur comme DateTime, booléen ou entier pour leurs valeurs par défaut, ou les types de référence comme string pour null. Ça fonctionne même sur object, ce qui est un peu étrange.

3voto

Jeff Meatball Yang Points 12021

Voici quelques exemples :

// retourne le nombre de millisecondes depuis le 1er janvier 1970 (utile pour convertir des dates C# en dates JS)
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;
}

et une fonction ToDelimitedString :

// appliquer cette extension à n'importe quel objet IEnumerable générique.
public static string ToDelimitedString(this IEnumerable source, string delimiter, Func action)
{
    if (source == null)
    {
        throw new ArgumentException("La source ne peut pas être nulle.");
    }

    if (delimiter == null)
    {
        throw new ArgumentException("Le délimiteur ne peut pas être nul.");
    }

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

2voto

BrightUmbra Points 13844

Voici ToDelimitedString de Jeff écrit en utilisant String.Join:

public static string ToDelimitedString(this IEnumerable source, string delimiter, Func action) {
    // clauses de garde pour les arguments omises pour des raisons de concision

    return String.Join(delimiter, source.Select(action));
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X