2016-07-04 9 views
2

Ich habe mich nur gefragt, ob Sie schnell eine Frage für mich beantworten könnten. Ich mache ein Text-Adventure-Spiel, und ich versuche, den Namen des Spielers im Hauptbereich festzulegen, ihn in einer Variablen zu speichern und für andere Methoden zu verwenden.Weitergabe von Variablen an verschiedene Methoden in C#

public static void Main(string[] args) 
{ 
    //intro 

    System.Console.WriteLine("Welcome to TextAdventure!"); 
    System.Console.WriteLine("This is an entry level program made by JussaPeak"); 
    System.Console.WriteLine("commands will be noted in the text by(). enter an applicable choice."); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine("Please enter your name:"); 
    string name = Convert.ToString(Console.ReadLine()); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine("Hello, {0}. You are about to embark on a lackluster journey of my first text adventure. i hope you enjoy!", name); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine(" "); 

    StartingArea(); 
} 
public static void GypsyConvo2() 
{ 
    Console.WriteLine("You decide to stay and hear her out"); 
    Console.ReadKey(); 
    Console.WriteLine("{0}: Who is this person?", name); 
    Console.ReadKey(); 
    Console.WriteLine("Gypsy: He is the shapeshifting king from the mountain in the west. His land is untouched by ours."); 
    Console.WriteLine("'I believe he is plotting to take our land...'"); 
    Console.ReadKey(); 
    Console.WriteLine(" "); 
    Console.WriteLine("{0}: and what am i to do about that?", name); 
    Console.ReadKey(); 
    Console.WriteLine("Gypsy: You must warn the queen. i've found an old sewer maintainence that can lead near the entrance to the castle itself. You'll have to find your own way from there."); 


} 

So wie würde ich es machen, so dass die Variable, die einen Wert von Readline in Haupt, verwendbar in anderen Verfahren zugewiesen werden wurden, ohne es mir Fehler werfen?

+0

_ „ohne es mir werfen Fehler“ _ - - Welche Fehler? Was hast du probiert? Welchen Fehler haben Sie Probleme herauszufinden? Natürlich können Sie in Ihrer statischen Klasse statische Felder deklarieren, die von allen verschiedenen Methoden in Ihrer Klasse gemeinsam genutzt werden können. Eine Methode kann das Feld festlegen, jede andere Methode kann das Feld lesen. Es ist überhaupt nicht klar, was Ihre Frage ist (wie die FGITW-Antworten zeigen, die über sich selbst fallen und versuchen zu erraten, was Sie meinen). –

+0

Ich deklariere die Variable in Main. Es nimmt den Wert von ReadLine. Ich versuche, es in anderen Methoden zu verwenden, aber es gibt mir eine Reihe von Fehlern. Fehler wie: Für das nicht statische Feld, die Methode oder die Eigenschaft für program.name ist eine Objektreferenz erforderlich. und wenn es außerhalb von main nicht erklärt wird, sagt es mir nur, dass es im aktuellen Kontext nicht existiert.Ich habe versucht, die Rückgabetypen meiner verschiedenen Methoden zu ändern, indem ich die Variable als Argument hinzufüge, und es wirft mich immer nur auf diese Fehler. –

+0

meine Appologien. Danke, dass Sie mich wissen lassen, um die spezifische Fehlermeldung zu suchen, anstatt das allgemeine Problem. –

Antwort

4

Wenn Sie die Variable an die Methode übergeben wollen, dann müssen Sie die Signatur der Methode ändern, um ein Argument zu akzeptieren:

public static void GypsyConvo2(string name) 
{ 

} 

und wenn Sie die Methode aufrufen, übergeben Sie die name wie diese :

GypsyConvo2(name); 

Verwendung in der Methode GypsyConvo2:

Console.WriteLine("{0}: Who is this person?", name);

Form C# Specs:

1.6.6.1 Parameter

Parameter werden verwendet, um Werte oder variable Referenzen auf Verfahren zu übergeben. Die Parameter einer Methode erhalten ihre tatsächlichen Werte aus den Argumenten , die beim Aufruf der Methode angegeben wurden. Es gibt vier Arten von Parametern: Wertparameter, Referenzparameter, Ausgabeparameter, und Parameterarrays.

Oder wenn Sie nicht möchten, dass es passieren um:

static string name; 
static static void Main(string[] args) 
{ 
    //intro 

    System.Console.WriteLine("Welcome to TextAdventure!"); 
    System.Console.WriteLine("This is an entry level program made by JussaPeak"); 
    System.Console.WriteLine("commands will be noted in the text by(). enter an applicable choice."); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine("Please enter your name:"); 
    name = Convert.ToString(Console.ReadLine()); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine("Hello, {0}. You are about to embark on a lackluster journey of my first text adventure. i hope you enjoy!", name); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine(" "); 

    StartingArea(); 
} 

und halten Methoden wie GypsyConvo2 gleich.

+0

, um es in einer Zeichenfolge zu verwenden, wäre es etwa so: console.writeline ("{0}: ich sage etwas", GypsoConvo2 (name)); damit bei der Deklaration der Methode bestanden? –

+0

@FirstStep keine große Sache, um die gesamte Antwort abzustimmen! – user3185569

+0

@DeronEZLauver Um es zu verwenden, verwenden Sie einfach 'name'. Wie folgt: 'console.writeline (" {0}: Ich sage etwas ", Name);' – user3185569

3

Anstatt die name-Variable in Main zu deklarieren, deklarieren Sie eine private Variable in der Klassenmitgliederebene (out side main). Auf diese Weise können Sie den Wert der Variablen zwischen Methoden teilen.

private string Name; 
public static void Main(string[] args) 
{ 
    System.Console.WriteLine("Welcome to TextAdventure!"); 
     System.Console.WriteLine("This is an entry level program made by JussaPeak"); 
     System.Console.WriteLine("commands will be noted in the text by(). enter an applicable choice."); 
     System.Console.WriteLine(" "); 
     System.Console.WriteLine(" "); 
     System.Console.WriteLine("Please enter your name:"); 
     name = Convert.ToString(Console.ReadLine()); 
     System.Console.WriteLine(" "); 
     System.Console.WriteLine("Hello, {0}. You are about to embark on a lackluster journey of my first text adventure. i hope you enjoy!", name); 
     System.Console.WriteLine(" "); 
     System.Console.WriteLine(" "); 
     System.Console.WriteLine(" "); 
     System.Console.WriteLine(" "); 
     System.Console.WriteLine(" "); 

     StartingArea(); 
} 

Anderer Ansatz würde Parameter in Methoden verwenden, aber die Variablennamen Sie haben, ist Name, klingt es ein Klassenmitglied ist und das paßt hier nicht. Aber wenn Sie das Gefühl, es ist kein Klassenstufe Mitglied ist, oder Sie haben andere Situation, wo Sie es fühlen, ist nicht Klasse-Niveau, dann können Sie einen Parameter in GypsyConvo2 erklären()

public static void GypsyConvo2(string name) 
{ 
    //your code goes here 
} 
Verwandte Themen