478 Stimmen

Was sind Ihre bevorzugten Erweiterungsmethoden für C#? (codeplex.com/extensionoverflow)

Lassen Sie uns eine Liste mit Antworten erstellen, in der Sie Ihre ausgezeichneten und bevorzugten Erweiterungsmethoden .

Die Anforderung ist, dass der vollständige Code mit einem Beispiel und einer Erklärung, wie er zu verwenden ist, veröffentlicht werden muss.

Aufgrund des großen Interesses an diesem Thema habe ich ein Open Source Projekt namens extensionoverflow auf Codeplex .

Bitte markieren Sie Ihre Antworten mit der Zustimmung, den Code in das Codeplex-Projekt zu stellen.

Bitte posten Sie den vollständigen Quellcode und nicht nur einen Link.

Codeplex Nachrichten:

24.08.2010 Die Codeplex-Seite ist jetzt hier: http://extensionoverflow.codeplex.com/

11.11.2008 XmlSerialize / XmlDeserialize ist jetzt Implementiert y Einheit getestet .

11.11.2008 Es gibt noch Platz für weitere Entwickler ;-) JETZT anmelden!

11.11.2008 Dritter Beitragszahler beigetreten ExtensionOverflow , willkommen bei BKristensen

11.11.2008 FormatWith ist jetzt Implementiert y Einheit getestet .

09.11.2008 Zweiter Beitragszahler beigetreten ExtensionOverflow . willkommen bei chakrit .

09.11.2008 Wir brauchen mehr Entwickler ;-)

09.11.2008 ThrowIfArgumentIsNull in jetzt Implementiert y Einheit getestet auf Codeplex.

1voto

Konvertierung einer beliebigen Zeichenkette in den Typ Int32

// Calls the underlying int.TryParse method to convert a string
// representation of a number to its 32-bit signed integer equivalent.
// Returns Zero if conversion fails. 
public static int ToInt32(this string s)
{
    int retInt;
    int.TryParse(s, out retInt);
    return retInt;
}

MUSTERVERWENDUNG:
string s = "999";
int i = s.ToInt32();

1voto

Ein generischer Versuch:

class Program
{
    static void Main(string[] args)
    {
        var z = 0;
        var a = 0.AsDefaultFor(() => 1 / z);
        Console.WriteLine(a);
        Console.ReadLine();
    }
}

public static class TryExtensions
{
    public static T AsDefaultFor<T>(this T @this, Func<T> operation)
    {
        try
        {
            return operation();
        }
        catch
        {
            return @this;
        }
    }
}

Stellen Sie es in das CodePlex-Projekt ein, wenn Sie möchten.

1voto

andleer Punkte 21968

El WoWenn() Methode

var query = dc.Reviewer 
    .Where(r => r.FacilityID == facilityID) 
    .WhereIf(CheckBoxActive.Checked, r => r.IsActive); 

public static IEnumerable<TSource> WhereIf<TSource>(
    this IEnumerable<TSource> source,
    bool condition, Func<TSource, bool> predicate) 
{ 
    if (condition) 
        return source.Where(predicate); 
    else 
        return source; 
}

public static IQueryable<TSource> WhereIf<TSource>(
    this IQueryable<TSource> source,
    bool condition, Expression<Func<TSource, bool>> predicate) 
{ 
    if (condition) 
        return source.Where(predicate); 
    else 
        return source; 
}

Ich habe auch Überladungen für das Indexprädikat in der Erweiterungsmethode Where() hinzugefügt. Um mehr Spaß zu haben, fügen Sie eine Variante hinzu, die ein zusätzliches 'else'-Prädikat enthält.

1voto

andleer Punkte 21968

Inline-Umsetzungen: Ich mag dieses kleine Muster. Ich habe es für Boolean, Double und DateTime ausgefüllt. Entworfen, um die C# zu folgen ist y comme Betreiber.

public static Int32? AsInt32(this string s)
{
    Int32 value;
    if (Int32.TryParse(s, out value))
        return value;

    return null;
}

public static bool IsInt32(this string s)
{
    return s.AsInt32().HasValue;
}

public static Int32 ToInt32(this string s)
{
    return Int32.Parse(s);
{

1voto

Fredy Treboux Punkte 2957

Ich habe mich mehrmals dabei ertappt, dass ich mir so etwas wie, ich glaube, Groovys "Sichere Navigation" gewünscht habe.

Desde http://groovy.codehaus.org/Statements :

Wenn Sie ein komplexes Objekt gehen Graphen durchlaufen und wollen nicht, dass NullPointerExceptions geworfen werden, können Sie den Operator ?. anstelle von . verwenden, um Ihre Navigation durchführen.

def foo = null def bar = foo?.something?.myMethod() assert bar == null

Also, denken Sie, ist eine gute Idee Hinzufügen einer Erweiterung Methode für sie? Etwas wie:

obj.SafelyNavigate(x => x.SomeProperty.MaybeAMethod().AnotherProperty);

Ich denke, das wäre schön, auch wenn es einige Schwierigkeiten mit sich bringen kann.

Wenn Sie es für eine gute Idee halten:

  • Was sollte Ihrer Meinung nach bei Werttypen geschehen? Standardwert zurückgeben? werfen?, durch generische Einschränkung deaktivieren?.
  • Eine NullReferenceException zu schlucken, um sie zu implementieren, wäre zu riskant, Was schlagen Sie vor? Das Durchlaufen des Ausdrucksbaums bei jedem Aufruf oder Member-Zugriff scheint schwierig und ein Overkill zu sein (wenn überhaupt möglich), oder?

Vielleicht ist es nur eine schlechte Idee :D, aber ich sehe es als etwas, das nützlich sein kann, wenn es richtig gemacht wird. Wenn es nichts Vergleichbares gibt und Sie der Meinung sind, dass es einen gewissen Wert hat, werde ich es vielleicht versuchen und die Antwort danach bearbeiten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X