myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » [ExtensionMethods] ExtraLINQ — Additional Extension Methods for LINQ to Objects
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

[ExtensionMethods] ExtraLINQ — Additional Extension Methods for LINQ to Objects

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
m0rius
myCSharp.de-Mitglied

images/avatars/avatar-3125.png


Dabei seit: 28.08.2007
Beiträge: 994
Entwicklungsumgebung: Visual Studio 2010 Professional


m0rius ist offline

[ExtensionMethods] ExtraLINQ — Additional Extension Methods for LINQ to Objects

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

an dieser Stelle möchte ich euch mein neuestes Projekt vorstellen:

ExtraLINQ

ExtraLINQ ist eine Klassenbibliothek, die zusätzliche Erweiterungsmethoden für LINQ to Objects bereitstellt.

Den Quellcode findet ihr unter  Github » ExtraLINQ.

m0rius

m0rius hat dieses Bild angehängt:

ExtraLINQ (small).png

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von m0rius am 03.09.2011 21:33.

02.09.2011 21:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
m0rius
myCSharp.de-Mitglied

images/avatars/avatar-3125.png


Dabei seit: 28.08.2007
Beiträge: 994
Entwicklungsumgebung: Visual Studio 2010 Professional

Themenstarter Thema begonnen von m0rius

m0rius ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zur Zeit sind folgende Erweiterungsmethoden enthalten:

m0rius hat dieses Bild (verkleinerte Version) angehängt:
EnumerableExtensions.png
Volle Bildgröße

02.09.2011 21:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
dN!3L dN!3L ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2985.png


Dabei seit: 13.08.2004
Beiträge: 2.829


dN!3L ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Mal eine kleine Anmerkung zum Code: Du arbeitest oft mit Count() in deinen Erweiterungen. Die Benutzung von Iteratoren würde vieles etwas effektiver gestalten.

Die CountsMin-, CountsMax- und CountsExactly-Methoden würden bei unendlichen Auflistungen so beim Durchzählen in einer Endlosschleife hängen bleiben - was sie nicht müssten, da du ja die Grenze, bis zu der gezählt werden muss, um das Ergebnis (true/false) zu bestimmten, kennst. Zumal du in bestimmten Fällen ja schon vorher abbrechen kannst, ohne alle Elemente geholt/durchgezählt zu haben.

Ebenso deine Random-Erweiterungsmethode: Das würde für Auflistungen, die keine Collections sind, bedeuten, dass entweder alle Elemente gepuffert werden müssen oder die Auflistung zweimal durchlaufen werden muss. Unter  C# in Depth: Downloads (Chapter12\RandomExtension) findest du eine Implementierung, die bei Collections mit Count() arbeitet und bei Nicht-Collections eine Möglichkeit verwendet, nur einmal über die Auflistung zu iterieren.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von dN!3L am 03.09.2011 13:45.

02.09.2011 21:51 Beiträge des Benutzers | zu Buddylist hinzufügen
m0rius
myCSharp.de-Mitglied

images/avatars/avatar-3125.png


Dabei seit: 28.08.2007
Beiträge: 994
Entwicklungsumgebung: Visual Studio 2010 Professional

Themenstarter Thema begonnen von m0rius

m0rius ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo dN!3L,

vielen Dank für die Anmerkung — ich mache mich mal ans Überarbeiten und poste hier anschließend eine der Implementierungen.

Mittlerweile ist ExtraLINQ auch als NuGet-Package zu haben: install-package ExtraLINQ oder install-package extralinq (siehe  NuGet » Packages » ExtraLINQ).

m0rius

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von m0rius am 09.09.2011 22:52.

03.09.2011 21:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegt mehr als ein Monat.
m0rius
myCSharp.de-Mitglied

images/avatars/avatar-3125.png


Dabei seit: 28.08.2007
Beiträge: 994
Entwicklungsumgebung: Visual Studio 2010 Professional

Themenstarter Thema begonnen von m0rius

m0rius ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo dN!3L,

meine Implementierung der CountsMax-Methode sieht nun folgendermaßen aus:

C#-Code:
public static bool CountsMax<TSource>(this IEnumerable<TSource> source, int expectedMaxItemCount)
{
    if (source == null)
    {
        throw new ArgumentNullException("source");
    }

    if (expectedMaxItemCount < 0)
    {
        throw new ArgumentException("The expected item count must not be negative.", "expectedMaxItemCount");
    }

    int itemCount = 0;
    foreach (TSource item in source)
    {
        itemCount++;

        if (itemCount > expectedMaxItemCount)
        {
            return false;
        }
    }

    return true;
}

Ist das eine Implementierung, wie du sie vorgesehen hast? Analog würden die Methoden CountsMin und CountsExactly aussehen.

m0rius
12.10.2011 23:40 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
dN!3L dN!3L ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2985.png


Dabei seit: 13.08.2004
Beiträge: 2.829


dN!3L ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von m0rius:
Ist das eine Implementierung, wie du sie vorgesehen hast?

Ja, so in der Art würde ich eine Implementierung erwarten. Daumen hoch
13.10.2011 09:50 Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 5.358
Entwicklungsumgebung: VS 2010 sup{Editionen}
Herkunft: Waidring / Tirol


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo m0rius,

Zitat:
C#-Code:
    if (expectedMaxItemCount < 0)
    {
        throw new ArgumentException("The expected item count must not be negative.", "expectedMaxItemCount");
    }

hier würde eine ArgumentOutOfRangeException besser passen.


mfG Gü
13.10.2011 10:05 Beiträge des Benutzers | zu Buddylist hinzufügen
m0rius
myCSharp.de-Mitglied

images/avatars/avatar-3125.png


Dabei seit: 28.08.2007
Beiträge: 994
Entwicklungsumgebung: Visual Studio 2010 Professional

Themenstarter Thema begonnen von m0rius

m0rius ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo dN!3L,

super, dann habe ich dich richtig verstanden. Ich melde mich hier wieder, wenn ich die Änderungen vorgenommen und gepusht habe.


Hallo gfoidl,

du hast Recht, vielen Dank für den Hinweis. Wird geändert!

m0rius
13.10.2011 22:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
m0rius
myCSharp.de-Mitglied

images/avatars/avatar-3125.png


Dabei seit: 28.08.2007
Beiträge: 994
Entwicklungsumgebung: Visual Studio 2010 Professional

Themenstarter Thema begonnen von m0rius

m0rius ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

ich habe nun sämtliche Verbesserungen (bis auf die Random-Erweiterungsmethode; die kommt noch) eingearbeitet und hochgeladen. Soweit vielen Dank dafür!

Habt ihr ansonsten zusätzliche Anregungen oder Vorschläge für weitere Erweiterungsmethoden?

m0rius
15.10.2011 00:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
dN!3L dN!3L ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2985.png


Dabei seit: 13.08.2004
Beiträge: 2.829


dN!3L ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Eins ist mir noch aufgefallen: Du verwendest die Count-Methode jetzt ja gar nicht mehr. Wenn eine Auflistung aber eine Count-Methode anbietet, wäre dessen Verwendung besser bzw. sicherlich schneller/ressourcenschonender als die Verwendung des Enumerators. Ich würde noch eine "Early-Exit-Strategie" einbauen:

C#-Code:
ICollection collection = source as ICollection;
if (collection!=null)
{
    ... collection.Count ...
}

Thema Anregungen & Vorschläge: Du hast ja nicht erwähnt, welchen Zweck ExtraLINQ genau haben soll (außer "Erweiterungsmethoden für LINQ2Objects"). Aber du scheinst dich auf Auflistungen und Zählen spezialisiert zu haben :)
Ne Idee von mir: Gib mir die kürzere/längere Auflistung zurück.
15.10.2011 20:40 Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegt mehr als ein Monat.
m0rius
myCSharp.de-Mitglied

images/avatars/avatar-3125.png


Dabei seit: 28.08.2007
Beiträge: 994
Entwicklungsumgebung: Visual Studio 2010 Professional

Themenstarter Thema begonnen von m0rius

m0rius ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo dN!3L,

jetzt ist der aktualisierte Quellcode auch auf GitHub verfügbar. Ich hatte deine Änderungen zwar direkt am 15. Oktober umgesetzt, aber noch nicht aktualisiert.

m0rius
11.12.2011 01:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 23.05.2013 00:28