Variable Rückgabetyp einer Methode in C#
Ich möchte ein parameter zu einer Methode, und ich möchte, dass meine Methode zum zurückgeben von Daten, indem der parameter. Daten vom Typ boolean, string, int oder etc. Wie kann ich den return-Typ einer Variablen von einer Methode? Ich will nicht, um ein Objekt wieder geben und dann warf es in einen anderen Typ. Zum Beispiel:
BlaBla VariableReturnExampleMethod(int a)
{
if (a == 1)
return "Demo";
else if (a == 2)
return 2;
else if (a == 3)
return True;
else
return null;
}
Der Grund, warum ich wollen, das ist, ich habe eine Methode, die liest eine ausgewählte Spalte einer Zeile aus der Datenbank. Arten von Spalten sind nicht gleich, aber ich muss zurück, jede Spalte die Informationen.
- on a side note, anstatt alle diese, wenn elses ich sagen, tun ein wenig Forschung in einem switch msdn.microsoft.com/en-us/library/06tc147t(v=vs. 80).aspx
- für den Schalter, aber auch in diesem Fall die
else
ist nicht erforderlich,if
genügt. - bist u sicher, wenn Sie wieder nur ein paar standard-Typen wie int, string etc.? oder ist es mehr Klassen aus ur-code?
- Warum nicht mit dem Objekt mit reflektion? In der Regel die beste Wahl, wenn Sie nicht wissen, die Daten, die Sie im Umgang mit im Voraus.
- blog.kjeldby.dk/2009/06/mit-generic-Methoden-und-schränkt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, dass ist im Grunde, was Sie tun zu tun haben. Alternativ, wenn Sie mit C# 4 können Sie den Rückgabetyp
dynamic
, die es erlauben die Konvertierung implizit:Du im Grunde Angabe von Typen zu lassen, die compiler wissen, was zu erwarten ist. Wie kann das funktionieren, wenn der Typ ist nur bekannt Ausführung Zeit? Der Grund, warum die
dynamic
version funktioniert, ist, dass es im Grunde sagt der compiler zu verschieben, seine normale Arbeit bis Ausführung Zeit - so verlieren Sie die normale Sicherheit, welche lassen würde im zweiten Beispiel wird nicht kompilieren.Verwenden
dynamic
- Schlüsselwort anstelle vonBlahBlah
wenn Sie auf.Net 4.0
aber wenn weniger dannobject
ist Ihre sicherste Wette, denn es ist die Basisklasse für jede andere Klasse die man sich denken kann.Es klingt wie kann dies eine gute Falle für Generika. Wenn Sie wissen, welchen Datentyp Sie erwarten, wenn Sie es nennen, Sie nennen können, die insbesondere die generische version der Funktion.
Field<T>
aus DataTable als ein Beispiel dafür. Die einzige gute Optionen sind dieser oder Rückgabe nur Objekt, und als OP ausgeschlossen, die andere option, das ist das, was bleibt.Verwenden Sie so etwas wie Dapper-dot-net (geschrieben von Marc Gravell und Sam Safran in unserer eigenen Stack-Overflow) zu ziehen Dinge aus der DB. Es behandelt die Datenbank-zu-Objekt mapping für Sie.
Außerdem, wenn Sie nicht wollen, ein Werkzeug zu verwenden, und Sie ziehen aus einer Datenbank, und Sie wissen, dass die Datentypen der verschiedenen Spalten zur compile-Zeit (wie das klingt, werden Sie tun), Sie sollten wahrscheinlich zeilenweise statt spaltenweise.
Hinweis: Sie können mithilfe des Objekt-Initialisierer-syntax und linq hier, aber dies ist die grundlegende Art, wie ich denken konnte, demonstrieren diese ohne eine Tonne zusätzliche Sachen.
Beachten Sie auch, dass hier ich gehe davon aus, dass Sie nicht eigentlich zurückkehren wollen "Demo", 2, true, aber die Werte in der Zeile. Das bedeutet nur, Sie würde ändern Sie die hart codierte Werte:
row.GetStringType(stringColumnIdx)
oder etwas ähnliches.Verwenden Sie den Rückgabetyp
object
, dann sind Sie in der Lage zu bekommen zurück geben. Sie haben, um die Rückkehr Art äther durch Reflexion oder eine andere Methode.prüfen:
Bearbeiten:
Ich bin in der Gunst der stark typisierte Objekte und implementieren Sie können es leicht auf .net-Plattform.
Ich freue mich auf Ihre Fragen und eine ist besser als der zweite, aber beim letzten muss ich nach dem umschreiben des um besser zu verstehen, die Lösung. Und diese Lösung skip () lange if -, else-Stapel und ersetzt Sie durch eine foreach-on-Typen enum, wo können wir die Durchführung aller Arten, was wir brauchen. Ich mehr wie mit dynamischen, aber diese ist nutzbar auch.
Main-Funktion
GetValueByValidating
zurückgegebene Wert, wenn der Typ ist definiert und möglich, in anderen Fällen false zurückSchauen niranjan-kala dies ist Ihre wichtigste Funktion nach umschreiben.