Dienstag, Januar 21, 2020

Wie, um alle Elemente in eine ObservableCollection das erfüllen einer Bedingung C#

Ich bin auf der Suche nach einem ordentlichen Weg zu finden, alle Werte in eine observable collection, welche bestimmte Kriterien erfüllen. Für dieses Beispiel um Dinge einfach zu halten sagen wir, dass seine Sammlung enthält Ganzzahlen und ich versuche zu finden, alle Elemente, die größer sind als 5.

Die beste Möglichkeit, die ich derzeit wissen, es zu tun ist, wie dieses

ObservableCollection<Int> findAllGreaterThanFive (ObservableCollection<Int> numbers)
{
    ObservableCollection<Int> numbersGreaterThanFive;

    foreach(Int number in numbers)
    {
        if (number > 5)
        {
            numbersGreaterThanFive.add(number);    
        }
    }

    return numbersGreaterThanFive;
}

Offensichtlich ignorieren alle einfachen Lösungen, die die Vorteile der Tatsache, ich bin auf der Suche nach ints brauche ich eine Lösung, die funktioniert mit jedem ObservableCollection jede Art mit jeder Bedingung. Ich Frage mich nur, ob die überprüfung jedes Element mit der foreach-Schleife und die bedingte ist der beste Weg, es zu tun?

  • warum sind Sie der Rückkehr eine neue Kollektion?
  • Senden Sie in den filter 2. parameter der Methode. Verwenden Sie eine Func<int,bool> in diesem Fall.
  • Ich würde sagen, die Verwendung von LINQ. Verzögerte Ausführung ist dein Freund in diesem Fall.
InformationsquelleAutor DomAyre | 2014-09-09

2 Kommentare

  1. 7

    können Sie mit System.Linq-namespace, fügen Sie using-Anweisung using System.Linq und danach benutzen Sie folgenden Where Methode.

    ObservableCollection<int> list = new ObservableCollection<int>();
    list.Where(i => i > 5).ToList();

    können Sie jede Art von Objekten, wie :

    ObservableCollection<DataItem> list = new ObservableCollection<DataItem>();
    list.Where(i => i.ID > 10);

    Den obigen code gibt DataItem ist mit ID größer als 10 ist.

    Wenn Sie sicher es gibt nur einen Datensatz befriedigender Zustand, können Sie First() Methode wie :

    ObservableCollection<DataItem> list = new ObservableCollection<DataItem>();
    list.First(i => i.ID == 10);

    Obigen code gibt das DataItem mit der ID 10. Aber wenn es keinen Datensatz mit der ID = 10, dann wird eine Ausnahme geworfen. Vermeiden Sie diese, wenn Sie sind nicht sicher, es ist nur ein Datensatz erfüllt die Bedingung. Sie können auch verwenden FirstOrDefault() Methode.

    ObservableCollection<DataItem> list = new ObservableCollection<DataItem>();
        DataItem item = list.FirstOrDefault(i => i.ID == 10);
    if(item != null)
    {
     //DoWork
    }

    Wenn es keinen Datensatz mit der ID = 10, dann Punkt null.

  2. 8

    Können Sie etwas sagen wie:

    var numbersGreaterThanFive = numbers.Where(x => x > 5);
    • Zu erweitern, nutzen Sie die IComparable-anstelle von „>“ und eine variable anstelle von „5“ zu befriedigen, den letzten Teil der Frage.
    • vor allem, return new ObservableCollection<Int>(numbers.Where(x => x > 5)).
    • Sie können .ToList() Methode auch. z.B. var numbersGreaterThanFive = numbers.Where(x => x > 5).ToList();
    • Dies funktioniert nicht für mich, ich bin versucht, einen universellen windows-app btw, wenn das etwas ändert und ich bin mit einem benutzerdefinierten Klasse als mein Typ, erhalte ich die Fehlermeldung System.Sammlungen.ObjectModel.ObservableCollection< – App.customClass> enthält keine definition für ‚Wo‘,
    • Wenn LINQ ist nicht möglich, meine Antwort wird zwar nicht funktionieren (Sie müssen es hinzufügen, um die tags aber). Ich verstehe nicht, warum die akzeptierte Antwort ok funktioniert (auch Einsätzen).

Kostenlose Online-Tests