Wie kann ich ermöglichen, eine Methode zu akzeptieren, entweder ein string oder ein int?
Verwendung von C# 4.0, gibt es eine Möglichkeit, eine Methode (ohne Schaffung einer überlastung) zu akzeptieren, ein string oder ein int und dann erlauben Sie mir zu erkennen, welcher Typ übergeben wurde?
- Das ist genau die Verwendung, für die überladenen Methoden bestimmt sind. Warum bist du nicht mit Ihnen?
- Vereinbaren Sie mit Cody. Es KANN getan werden, aber es kann nicht getan werden, ich eine sehr hübsche Art und Weise. Mich und Cody haben zwei Vorschläge unten, aber es ist nicht ein sehr guter Weg, es zu tun, wirklich.
- Danke Cody. Ich bin nicht gegen Sie, ich wollte nur sicher sein, dass ich fehlte nicht eine einfache, neue Funktion in der Version 4.0, die erlauben würde, diese. Da ist es jetzt auch möglich, optionale und benannte Typen ich dachte, vielleicht gab es da eine neue saubere Weg dies zu tun. Danke!
- Nicht wirklich. Es gibt alternativen, aber es gibt keinen besseren Weg. Es fasziniert mich, dass Sie denken, der die Methode überladen als unrein oder weniger als optimal in keiner Weise. Ich denke ehrlich gesagt, dass es eine der coolsten Funktionen der Sprache aller Zeiten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da bist du mit C# 4.0, Sie können schreiben, ein generische Methode. Zum Beispiel:
Aber man sollte sehr ernsthaft erwägen, ob oder nicht, das ist eine gute Idee. Das obige Beispiel ist ein bisschen ein code smell. In der Tat, der springende Punkt, der Generika ist zu generic. Wenn Sie mit besonderer Fall Ihren code abhängig vom Typ des Objekts übergeben, das ist ein Zeichen, Sie sollten mit überlastung statt. So, jede Methode überlast Griffe seiner einzigartigen Fall. Ich kann mir nicht vorstellen, irgendwelche Nachteile zu tun.
object
ist nicht eine bessere Lösung. Die Verwendung von Generika ist die bessere option, da es verringert die performance-Einbußen entstehen durch die Boxen eineint
in eineobject
- und Umgekehrt.Sicher, Sie können! Ein Beispiel HIERFÜR ist
int
ist boxed in eineobject
. Da der Fragesteller ist mit C# 4.0, Generika sind eine viel bessere option.Ich würde denken, eine Methode überladen wäre eine einfache Lösung, wenn Sie möchten, zu bleiben Weg von Sachen wie Reflexion oder überprüfung der Arten.
Können Sie wickeln string und int in einigen wrapper mit marker-Schnittstelle und übergeben Sie an die Methode.
Sowas
Contract.Requires(typeof(T) == typeof(string))