Ich habe eine Klasse, deren primäres Klassenmitglied eine Dictionary(Of DateTime,CustomClass)
ist. Ich möchte eine Methode schreiben, die Elemente des Wörterbuchs löscht, wenn bestimmte Bedingungen erfüllt sind, ähnlich einer .Where(Function(p) p.isTrue)
Funktion. Ich habe eine Dokumentation über die Verwendung eines Prädikats, aber nichts über das Bauen mit einem gefunden. Ist das möglich?Klassenmethode mit einem Funktions-/Prädikatparameter
Antwort
Ich bin in der Regel alle Gung-ho für LINQ, aber das ist eine Situation, in der ich denke, dass Sie rückwärts durch das Wörterbuch mit einer For/Next Schleife durchlaufen und entfernen Sie die Elemente, die Ihre Bedingungen nicht erfüllen:
Public Class Foo
'Primary class member
Public Property Bar As Dictionary(Of DateTime, Foo)
'Remove method based on some condition (you may want to pass a parameter here too)
Public Sub Remove()
'Use a For/Next loop backwards
For index As Integer = Me.Bar.Keys.Count - 1 To 0 Step -1
'Check for if the condition is met and then remove the item by its index
'If ... Then
' Me.Bar.Remove(Me.Bar.ElementAt(index).Key)
'End If
Next
End Sub
Sub New()
Me.Bar = New Dictionary(Of DateTime, Foo)
End Sub
End Class
sind Ich hoffte auf etwas ein wenig mehr Dynamik, es war auch eine leicht akademische Übung. Das Problem dabei ist, dass es nur für 1 Bedingung funktioniert. Ich hatte gehofft, in der Lage zu sein, die gleiche Methode für Datumsvergleiche oder Attribute von 'Foo' zu verwenden. – Andrew
Es ist nicht nur für Daten, Sie würden einfach alle Bedingungen (Datum und Ihre benutzerdefinierte Klasse) in der If-Anweisung festlegen. Geben Sie mir ein konkreteres Beispiel und ich werde Ihnen ein besseres Beispiel geben. – David
Ich denke, das OP möchte in der Lage sein, die Bedingung als Parameter zu übergeben, so dass er es nicht in der 'Remove()' -Funktion fest codieren müsste. So etwas wie Bozhidar vorgeschlagen hat. –
Ja, es ist möglich.
erklären Sie einfach eine Methode mit einem Func(Of...
) Argument, das den Zustand darstellt:
Public Sub RemoveElementIf(condition As Func(Of KeyValuePair(Of DateTime, Foo), Boolean))
If condition IsNot Nothing Then Bar = Bar.Where(Function(x) condition(x))
End Sub
Dann sind Sie LINQ intern verwenden können.
- 1. C# mit anderen Klassenmethode
- 2. Klassenmethode mit unbegrenzten Parameter
- 3. C++ vorbei Klassenmethode als Argument für eine Klassenmethode mit Vorlagen
- 4. Berufung Klassenmethode, bei einem Wechsel Tab
- 5. Überschreiben Klassenmethode von einem anderen Modul
- 6. Wie stubbe ich eine Klassenmethode mit einem class_double in RSpec?
- 7. Python Klassenmethode Dekorator mit Selbstargumenten?
- 8. mit self.method_name innerhalb einer Klassenmethode
- 9. Verwenden Super mit einer Klassenmethode
- 10. Stubbing eine Klassenmethode mit Sinon.js
- 11. iOS invoke Klassenmethode mit IMP
- 12. Kann ich geben Klassenmethode als und ein Standard-Argument an einem anderen Klassenmethode
- 13. Nested Singleton Klassenmethode Lookup
- 14. Ajax Callback als PHP-Klassenmethode mit Namespace
- 15. Klassenmethode funktioniert nicht
- 16. NSMutableArray in Klassenmethode
- 17. Protokoll für die Klassenmethode
- 18. Infer generischer Typ in Klassenmethode mit Swift
- 19. NodeJS-Klassenmethode Asynchrone Rückgabe
- 20. Erstellen einer Klassenmethode
- 21. NSManagedObject-Entity-Klassenmethode
- 22. RSpec - spöttisch eine Klassenmethode
- 23. Mock eine Klassenmethode mit Spott und Sinon
- 24. Mit Variable innerhalb setUpClass (Klassenmethode) - Unittest Python
- 25. Fehler beim Aufruf der Klassenmethode mit Python
- 26. Python initialisieren Klasse und Basisklasse mit Klassenmethode
- 27. Definition der Klassenmethode mit R5-Generatorobjekt anzeigen
- 28. Python: Map mit Klassenmethode, die Argumente benötigt
- 29. Verspotten Rückgabewerte einer konkreten Klassenmethode mit Moq
- 30. mit Klassenattributen Funktion in Klassenmethode - Python
Ich habe dies in einer Klasse, um Mapping zu tun, aber es scheint übertrieben für das kleine Bit, das Sie beschrieben. Sie konnten die Kriteriendaten nicht an die Methode übergeben. Einige Parameter können optional sein und übersprungen werden, wenn sie die Standardeinstellung – Plutonix