Funktioniert der C# unterstützt mehrere Werte zurückgeben?
Dies ist eine sehr grundlegende Frage, und ob das, was ich denken, tun, ist kompliziert/beteiligt, dann glaube ich nicht erwarten, dass Sie, um ins detail zu gehen... ich habe gelesen, dass dies kann bedeuten, Strukturen oder hash oder einige andere schreckliche Prozedur, die ich habe nicht bekommen es noch. Wenn dem so ist, bin ich sicher, werde es mir bald.
Arbeiten lernen, Klassen, Methoden, und Werte zurück.
Ich würde gerne meine Klasse/Methode return Aktuelle Stunde und Minute. Einfach genug, wirklich.
Ist dieser richtig gebaut, oder richtig?
class MyClass
{
public int GetHour (int hr, int min)
{
DateTime dt = DateTime.Now;
int hour = dt.Hour;
int minute = dt.Minute;
return hour;
return minute;
}
}
Und, ruft es aus Main()
: Immer einige Fehler (No overload for method
und Unreachable code detected
)
static void Main ( string[] args )
{
MyClass mc = new MyClass ();
Console.WriteLine ("Hour: {0} \n Minute: {1}", mc.GetHour());
Console.ReadLine ();
}
Frage ist: Bin ich in der Nähe?
InformationsquelleAutor der Frage DonG | 2010-10-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie erwähnt von @ChaosPandion, in diesem speziellen Fall würdest du wieder ein
DateTime
struct.Im Allgemeinen, jedoch, würden Sie haben die folgenden Optionen:
Mit
out
ParameterDies ist ein einfacher Weg, in der Regel immer funktioniert. Allerdings ist es ein bisschen umständlich, wie das Ergebnis zurückgegeben wird, wo man normalerweise erwarten würde, die Funktion zu übergebenden Argumente und die Signatur der Methode könnte langwierig und schwer zu umgestalten.
Mit einem array
Dies ist eine einfache Methode, die gut funktioniert, wenn die Werte zurückgegeben werden, haben den gleichen Typ.
Sie eine Eigenschaft Tasche (Eine Eigenschaft, die Tasche ist eine einfache Klasse, die nur Eigenschaften)
Dies ist sehr praktisch und ermöglicht eine einfache änderung der Art und Anzahl der zurückgegebenen Werte später ohne Veränderung der Signatur der Methode.
Mit einem Tupel
In C# 4.0 (benötigt VS 2010) können Sie die
Tupel<T1, T2, ...>
Klasse:C# 7.0 Tupel
C# 7.0 fügt Unterstützung für mehrere Werte zurückgeben. Sie können code schreiben, um eine implizit erzeugten Tupel:
Tupel-Elemente werden Namen
Item1
Item2
etc standardmäßig, aber Sie können auch angeben, Namen, z.B.dann Zugriff auf den tuple-Elementen, die über diese Namen:
InformationsquelleAutor der Antwort Dirk Vollmar
C# keine Unterstützung für mehrere Werte zurückgeben, so in diesem Fall sollten Sie Sie wieder ein
DateTime
struct, die die idiomatischen Ansatz. Der client-code kann einfach ignorieren die Eigenschaften, die Sie sich nicht kümmern. Könnte man erstellen Sie Ihre eigenen einfache Struktur, aber es ist wirklich nicht der Mühe Wert.InformationsquelleAutor der Antwort ChaosPandion
C# keine Unterstützung für die Vorstellung, direkt zurückgeben mehrerer Werte aus einer Methode in dieser Art und Weise. Es gibt jedoch ein paar Möglichkeiten, Methoden zu entwickeln, die mehrere Werte zurückgeben. Die erste ist die Verwendung
ref
/out
Parameter.Die zweite ist die Schaffung eines wrapper-Typ kapselt die zwei Werte. Ab 4.0 wird das ein bisschen einfacher, indem Sie die
Tuple
geben.InformationsquelleAutor der Antwort JaredPar
Ich schlage vor, Sie kehren das DateTime-Objekt. Dann in der main-Methode Sie aufrufen, Stunden-und Minuten-Eigenschaften.
InformationsquelleAutor der Antwort Peanut
1: Sie können nicht zwei
return
s. Sobald der compiler Sie erreicht diereturn
Anweisung, den Betrieb der Methode ist beendet.2: Warum würden Sie wollen, dass Ihre Methode, um Parameter empfangen, wenn Sie Sie nicht verwenden?
DateTime.Now
gibt Ihnen die aktuelle Zeit, wenn Sie ' ll denken von sich selbst als die Methode - was brauchen Sie, um Ihre Aufgabe abgeschlossen ist? Nichts.Also praktische Tipps:
1. Tatsächlich, die DateTime tut, was müssen Sie besser als Ihre Methode.
Wäre besser gewesen,
aber wir ignorieren das und halten es für eine übung in den Klassen.
2 die Rückgabe von zwei Werten ist gegen das Konzept der Methode - eine Methode gibt eine Sache (es gibt auch Ausnahmen
out
ref
sind, aber wir ignorieren Sie Sie einfach).Sie können tatsächlich sehen, dass in Ihrem eigenen code - Methode name ist
GetHour
nichtGetHourAndMinutes
. Ich glaube nicht, dass ich je gesehen habe in einer Methode den Namen mit dem Wort "und" - eine Methode nicht nur eine Sache.InformationsquelleAutor der Antwort Oren A
Yeah, Sie können nur eine 'Sache' ab " - Methode in C#.
Dem anderen problem, das Sie haben ist, dass Sie sich den Aufruf einer Methode ohne Parameter. Die Dinge in den Klammern:
Sind Parameter. Und Sie müssen angeben, dass Sie beim aufrufen der Methode, etwa so:
Aber natürlich in deinem Fall, macht es keinen Sinn, dies zu tun.
Antwort auf die Allgemeine Frage: "Wie bekomme ich mehr zurück, als ein Ding?" Sie verkapseln in einer Klasse, die Eigenschaften, und kehren die Klasse. Es geschieht so, in dem Beispiel, das Sie gegeben haben, die DateTime-Klasse genau das tut.
Hoffe, das ist hilfreich.
InformationsquelleAutor der Antwort Noon Silk
You cant return mehrere Wert. TimeSpan ist genau das, was Sie suchen. Erstellen Sie ein Objekt, dass mit Stunde, minute und sogar Sekunde, die Sie wollen, zu erfassen und zurückzugeben.
Kommen, um darüber nachzudenken, was Sie brauchen, vor, Sie haben nicht einmal zu schreiben, die Methode oben. Verwenden Sie einfach
DateTime.Now.TimeOfDay
direkt im codeInformationsquelleAutor der Antwort Fadrian Sudaman
Sorry, das kannst du nicht tun. Sie wäre besser gedient werden, die Rückgabe ein array oder ein Objekt. Sie könnten wieder das DateTime-Objekt und verwenden Sie es.
Auch-wie erwähnt-Ihre Funktion Unterschrift war nicht ordnungsgemäß aufgerufen.
InformationsquelleAutor der Antwort TheClair
In C# kann eine Methode zurück, die mehrere Male, wenn Sie
yield return
format.Gibt "Stunde 8 min 50"
InformationsquelleAutor der Antwort Arto Viitanen
Können Sie nicht, zweimal zurück, nur einmal.
Mehrere Rückgabewerte auf einmal verlangen, lambda-Ausdrücke, und AFAIK, nur Python ist dazu in der Lage.
Syntax, es geht so:
So sollten Sie vielleicht versuchen, IronPython, und dann dekompilieren von C#.
In C# es gibt genau zwei Möglichkeiten, um wieder mehr als einen Wert:
1. Verwenden Sie Argumente, die als call-by-reference, so dass Sie zuordnen können 3 Variablen und dann zurückkehren.
2. Verwenden Sie irgendeine Art von struct/class/array/Tupel/Vektor und platzieren Sie Ihre mehrere Werte hinein.
Call-by-reference ist so etwas wie dieses:
dann können Sie tun:
InformationsquelleAutor der Antwort Stefan Steiger
Dieser Frage möchte ich Sie bitten, ist, warum wollen Sie mehrere Werte zurückgeben? Zurückgeben mehrerer Werte für mich bedeutet, dass mehrere Aufgaben in der Funktion, und das sollte ein großes nicht, denn es verstößt gegen die SRP. Aber, wenn diese return-Werte sind bezogen vielleicht haben Sie ein Objekt machen, dass Sie fehlt und erstellt werden soll, statt? Oder eine Liste mit einem Typ von Objekt.
So kurz. Warum? Kapseln Sie Ihre Rückgabewerte in EINEM Objekt? Tun Sie nicht mehrere Dinge in einer Funktion.
EDIT: In deinem Fall würde ich auch nicht wickeln Sie Ihre Funktionalität in eine Funktion schreiben Sie einfach:
Und Ihre Funktion name
GetHour
nicht tun, was die Funktion sagt... wenn er sagtGetHour
sollte es wieder der Stunde und nicht die Stunde plus die minute.InformationsquelleAutor der Antwort Tomas Jansson