Ergänzend zu der Antwort von Konstantin möchte ich auf einen Beitrag hinweisen der den "TypeSwitch" vorstellt den ich selbst in meinen Projekten nutze. Hiermit kannst Du eine Art SwitchCase direkt auf einen Typen durchführen:
TypeSwitch.Do(data, TypeSwitch.Case(Of DateTime)(Sub(x) ok = x.IsBetween(.Parameter("Min"), .Parameter("Max"))), TypeSwitch.Case(Of Integer)(Sub(x) ok = x.IsBetween(.Parameter("Min"), .Parameter("Max"))), TypeSwitch.Default(Sub() Throw New ArgumentException("Typ wird nicht unterstützt")))
Ich find es viel eleganter als Meterlange "IF ELSE" Konstrukte. Den Kompletten SourceCode und weitere Erklärungen findest du hier.
+1 Guter Link! Aber nicht nach der ersten Antwort aufhören zu lesen. Ich finde auch die Beiträge sehr wichtig, die darauf drängen, den switch in einem solchen Fall komplett zu vermeiden und stattdessen mit Methoden-Überladung, Basisklasse mit abstrakter Methode oder Visitor-Pattern zu arbeiten.
Ich bin ein wenig leidgeplagt, weil ich ein System mit viel switch-case Refaktorieren musste. Teilweise musste ich switch-case-Anweisungen Klassenübergreifen synchron halten, damit die Anwendung ihre Aufgabe erfüllt. Das war zunehmend schwierig, weil die switch-case-Blöcke nicht miteinander "reden". Wer verspürt, mehr als nur ein einfache if-then-else zu verwenden, der sollte sich nochmal zurücklehnen und bitte bitte sein Klassen-Design überdenken. Nachfolgende Entwickler werden es einem danken.