C# Parameter an Main Methode übergeben

MarshallMathers

Lt. Commander
Registriert
Sep. 2016
Beiträge
1.250
Hallo,

Ich schreibe gerade ein Begrüßungsprogramm. Nun möchte ich in der Main-Methode eine Methode aufrufen, die, wenn sie Input bekommt, diesen wieder an die Main-Methode zurückgibt. Hier der Code:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Methods
{
    class Program
    {
        static void Main(string[] args)    // Entry Function. Main wird immer am Anfang des Programm gestartet. 
        {
            GreetUser();     // Calling a method
            GetInformation(answer);
            Console.WriteLine(answer);
            // ProcessInformation
            Console.ReadKey(); 
        }

        public static void GreetUser()  // Method Definition. Methods are basically functions. 
        {
            Random greeting = new Random();

            int greetIndex = greeting.Next(1, 4);
            
            switch(greetIndex) {
                case 1:
                    Console.WriteLine("Hello, Noel Pytlik.");
                    break;
                case 2:
                    Console.WriteLine("Hello, Master.");
                    break;
                default:
                    Console.WriteLine("Greetings, Sir!");
                    break;
            }

        }

        public static void GetInformation(string answer)
        {
            Console.WriteLine("How was your day?");
            Console.WriteLine("From zero to Amazing?");
            string answer = Console.ReadLine();
        }
    }
}
 
Ich kriege es nicht hin, die Parameter zu übergeben. Bis jetzt habe ich dass auch nur auf dem anderen Weg gesehen, also von der Main-Methode zur anderen. Meine Frage: Geht das?
 
Naja, sicher.

Code:
static void Main(string[] args) 
{ 
     string Rückgabe = GetInformation("Eingabewert");
}

public static string GetInformation(string Eingabe)
{
     return "Ich bin ein Rückgabewert";
}
 
public static void GetInformation(string answer):
Das void sagt, dass nichts zurückgegeben wird. Also nur etwas gemacht wird ohne das Informationen zum Aufrufer zurück gehen. Anstatt void kannst du zum Beispiel string schreiben. Dann gibt deine Methode einen Wert vom Typ string zurück. Du kannst natürlich auch alle anderen Werte (int, double, etc.) benutzen.
Das sähe dann so aus:
Code:
public static string GetInformation(string answer) {...}
hier ist wichtig, dass der Wert den du zurückgeben willst mit 'return' aufgerufen wird. Also musst du das hier am Ende der Methode anhängen:
Code:
return answer;
und wenn du die Methode aufrufst, kannst du den Wert so bekommen:
Code:
string antwort = GetInformation(answer);

EDIT: Da war ich wohl zu langsam. Defender1st hats dir ja auch noch mal als ein zusammenhängendes Beispiel aufgeschrieben.
 
Nur das natürlich hier das "string Eingabe" bzw "string answer" im Originalpost bei GetInformation komplett unsinnig ist da nichts damit gemacht wird. Sollte also GetInformation() sein.
 
Sorry, wenn ich nerve, aber ich mache immer noch etwas falsch. Ich weiß aber nicht, was.

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Methods
{
    class Program
    {
        static void Main(string[] args)    // Entry Function. Main wird immer am Anfang des Programm gestartet. 
        {
            GreetUser();     // Calling a method
            string antwort = GetInformation(answer);
            // ProcessInformation
            Console.ReadKey(); 
        }

        public static void GreetUser()  // Method Definition. Methods are basically functions. 
        {
            Random greeting = new Random();

            int greetIndex = greeting.Next(1, 4);
            
            switch(greetIndex) {
                case 1:
                    Console.WriteLine("Hello, Noel Pytlik.");
                    break;
                case 2:
                    Console.WriteLine("Hello, Master.");
                    break;
                default:
                    Console.WriteLine("Greetings, Sir!");
                    break;
            }

        }

        public static string GetInformation(string answer)  // void statt string. Es wird also ein String zurückgegeben
        {
            Console.WriteLine("How was your day?");
            Console.WriteLine("From zero to Amazing?");
            string answer = Console.ReadLine();
            return answer;
        }
    }
}

Er gibt mir den Fehler aus, dass erstens in der Main-Methode keine Variable answer bekannt ist, und dass zweitens answer unten nicht erstellt werden kann, aus Gründen, die ich nicht verstehe.

Hier der Fehlertext:

Fehler CS0136 Eine lokale Variable oder ein Parameter namens "answer" kann in diesem Bereich nicht deklariert werden, da der Name in einem einschließenden lokalen Bereich zur Definition einer lokalen Variablen oder eines Parameters verwendet wird. Line 43 Aktiv
 
Mein Post oben drüber hilft dir.
Du hast in der Methode answer als unnützen parameter und deklarierst answer dann nochmal in Zeile 43.
 
GetInformation hat als Parameter schon eine Stringvariable namens answer. Also die Variable answer existiert in der Methode schon, deswegen kannst Du nicht noch noch eine Stringvariable answer deklarieren. Sie könnte answer2 heißen, dann musst Du auch return answer2 schreiben.

Und die Variable answer in der MainMethode existiert nicht. Du musst sie erst deklarieren...
 
** Löschen
 
Zuletzt bearbeitet:
public static string GetInformation(string answer)
ändern in:
public static string GetInformation()

Von der Funktion her braucht diese Methode keinen Parameter.
Das Problem kommt daher dass du GLEICHZEITIG answer als Parameter festlegst und dann in der Methode selbst NOCHMAL answer als variable deklarierst.
 
Danke, du rettest meinen Feierabend! Jetzt klappt es, sorry, aber bis ich C# flüssig spreche, wird wohl noch einige Zeit ins Land gehen. Aber ich weiß ja jetzt, egal wie spät es ist und egal wie dumm die Frage, es sind immer welche da, die Geduld haben.... :D

Ich arbeite mich gerade durch ein Tutorial, in dem es so war wie ich es gemacht habe. Deswegen habe ich gar nicht daran gedacht, es könnte falsch sein.
 
Also was du hier mitnehmen solltest ist das was Defender1s schon sehr schön zusammengefasst hat.

Vor dem Methodennamen steht was die Methode zurückgibt (zb nichts/void oder einen string).
In den Klammern nach dem Methodenname stehen die Parameter der Methode. Diese kannst du in der Methode selbst benutzen.
Übergibst du zum Beispiel einen Integer int i dann kannst du in der Methode i = i+1 rechnen.
 
Zurück
Oben