Wie überprüft man, ob IEnumerable null oder leer ist?
Ich Liebe string.IsNullOrEmpty
Methode. Ich hätte gerne etwas, das erlauben würde, die gleiche Funktionalität für IEnumerable. Ist es so? Vielleicht sind einige Sammlung helper-Klasse? Der Grund warum ich Frage ist, dass in if
- Anweisungen, der code sieht unübersichtlich, wenn das schnittmuster ist (mylist != null && mylist.Any())
. Es wäre viel sauberer zu haben Foo.IsAny(myList)
.
Diesem post nicht geben, die Antwort: IEnumerable ist leer?.
Kommentar zu dem Problem - Öffnen
@msarchet: ich würde wahrscheinlich geben Ihnen die Antwort, wenn diese nicht den Kommentar 🙂
möglich, Duplikat der C#: der Empfohlene Weg, um zu überprüfen, ob eine Sequenz leer ist
dies erscheint mir wie eine Art ein XY-problem. anstatt zu Fragen "wie kann ich überprüfen, für null genau das, überall, ohne das es so störend" sollten Sie sich Fragen "wie kann ich mein design, und ich will nicht auf null prüfen überall?"
InformationsquelleAutor der Frage Schultz9999 | 2011-02-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher, dass Sie könnte schreiben, dass:
jedoch vorsichtig sein, dass nicht alle Sequenzen sind wiederholbar; in der Regel ich lieber nur spazieren gehen, Sie noch einmal, nur für den Fall.
InformationsquelleAutor der Antwort Marc Gravell
InformationsquelleAutor der Antwort Matt Greer
Hier ist eine modifizierte version von @Matt Greer ' s nützliche Antworten, die enthält eine statische wrapper-Klasse, so können Sie einfach kopieren-einfügen in eine neue source-Datei, nicht davon abhängig, Linq, und fügt eine generische
IEnumerable<T>
überladen, um zu vermeiden das boxing von Werttypen, die auftreten würde, mit dem nicht-generischen version. [EDIT: Hinweis, dass die Verwendung vonIEnumerable<T>
verhindert nicht, dass Boxen der enumerator, duck-typing nicht verhindern können, aber zumindest werden die Elemente in eine Wert-typisierte collection nicht jedes geschachtelt werden.]InformationsquelleAutor der Antwort yoyo
Andere Möglichkeit wäre, den Zähler und den Aufruf der MoveNext () - Methode, um zu sehen, ob es irgendwelche Elemente:
Dies funktioniert für IEnumerable als auch als IEnumerable<T>.
InformationsquelleAutor der Antwort Darren
Die Art, wie ich es, die Vorteile von einigen modernen C# - features:
Option 1)
Option 2)
Und durch die Art und Weise, verwenden Sie niemals
Count == 0
oderCount() == 0
nur zu prüfen, ob eine Kollektion leer ist. Verwenden Sie immer Linq ist.Any()
InformationsquelleAutor der Antwort Ronald Rey
Hier ist der code von Marc Gravell ' s Antwort, zusammen mit einem Beispiel der Verwendung.
Wie er sagt, nicht alle Sequenzen sind wiederholbar, so dass code kann manchmal Probleme verursachen, weil
IsAny()
beginnt das Durchlaufen der Sequenz. Ich vermute, was Robert Harvey ' s Antwort meinte, war, dass Sie oft gar nicht brauchen, um zu überprüfen, fürnull
und leer. Oft können Sie nur auf null prüfen, und verwenden Sie dannforeach
.Um zu vermeiden, beginnen der Sequenz zweimal und nutzen Sie
foreach
, ich schrieb einige code wie dieser:Ich vermute, die extension-Methode spart dir ein paar Zeilen zu Tippen, aber der code scheint deutlicher zu mir. Ich vermute, dass einige Entwickler würden nicht sofort erkennen, dass
IsAny(items)
wird tatsächlich Durchlaufen der Sequenz. (Natürlich, wenn Sie eine Menge von Sequenzen, die Sie schnell lernen, zu denken über das, was über diese Schritte.)InformationsquelleAutor der Antwort Don Kirkby
Dies kann helfen,
InformationsquelleAutor der Antwort Hossein Narimani Rad
Beginnend mit C#6 können Sie null-Vermehrung:
myList?.Any() == true
Wenn Sie noch finden es zu cloggy oder lieber eine gute ol' - Erweiterung-Methode, die ich empfehlen würde, Matt Greer und Marc Gravell die Antworten, noch ein bisschen mit der erweiterten Funktionalität für die Vollständigkeit.
Ihre Antworten bieten die gleiche grundlegende Funktionalität, aber jeder aus einer anderen Perspektive. Matt 's Antwort verwendet die
- string.IsNullOrEmpty
-Mentalität, in der Erwägung, dass Marc' s Antwort dauert Linq ist.Any()
Straße, um den job zu erledigen.Persönlich bin ich geneigt zu verwenden, die
.Jede()
Straße, möchte aber noch die Bedingung hinzuzufügen überprüfung der Funktionalität aus der Methode andere überladen:So können Sie immer noch Dinge wie :
myList.AnyNotNull(item=>item.AnswerToLife == 42);
als könnte man mit dem regelmäßigen.Any()
aber mit der zusätzlichen null-checkBeachten Sie, dass mit C#6 Weg:
myList?.Any()
gibt einebool?
eher als ein `bool, die die tatsächliche Wirkung der Vermehrung nullInformationsquelleAutor der Antwort Thomas Mulder
Benutze ich
Bool IsCollectionNullOrEmpty = !(Collection?.Any()??false);
. Hoffe, das hilft.Aufteilung:
Collection?.Any()
zurücknull
wenn die Sammlung ist null, undfalse
wenn die Sammlung leer ist.Collection?.Any()??false
unsfalse
wenn die Sammlung leer ist, undfalse
wenn die Sammlung istnull
.Ergänzen, das uns
IsEmptyOrNull
.InformationsquelleAutor der Antwort Sabyasachi Mukherjee
Ich hatte das gleiche problem und habe es lösen wie :
"c=>c!=null," ignoriert alle null-Entitäten.
InformationsquelleAutor der Antwort Hosein Djadidi
fügen Sie einfach
using System.Linq
und sehen die Magie, die passiert, wenn Sie versuchen, Zugriff auf die zur Verfügung stehenden Methoden in derIEnumerable
. Hinzufügen dies wird Ihnen Zugang zu der Methode mit dem NamenCount()
so einfach ist das. denken Sie daran, zu überprüfennull value
vor dem Aufrufcount()
🙂InformationsquelleAutor der Antwort Mohit
Benutzte ich einfach, wenn auch zu prüfen, für die es
überprüfen Sie heraus meine Lösung
InformationsquelleAutor der Antwort Basheer AL-MOMANI
Baute ich diese aus der Antwort von @Matt Greer
Beantwortete er die OP ' s Frage perfekt.
Wollte ich so etwas wie dies unter Beibehaltung der ursprünglichen Fähigkeiten von allen, während auch die überprüfung auf null. Ich bin dieses posting, falls jemand anderes muss etwas ähnliches.
Speziell wollte ich noch weitergeben kann, in ein Prädikat.
Die Benennung des extension-Methode könnte wohl besser sein.
InformationsquelleAutor der Antwort kb4000
Den anderen best-Lösung, wie unten zu überprüfen, leer oder nicht ?
InformationsquelleAutor der Antwort Shakeer Hussain