2017-06-05 2 views
0

Ich habe zwei Variablen in foreach für Benutzername und Kennwort, und ich möchte auf globale Variablen festlegen, aber ich weiß nicht wie? Ich versuche, mit diesem Code aber, wenn ich versuche, Strings mit Benutzername und Passwort mit dieser Variable erhalte ich Nachricht zu ersetzen:So legen Sie globale Variable in Hauptmethode C#

Use of unsigned local variable 'username'. 
Use of unsigned local variable 'password'. 

Der Code:

  public static void Main() 
     { 
      string[] lineOfContents = File.ReadAllLines(@"C:\\M\send.txt"); 

      string username; 
      string password; 

      foreach (var line in lineOfContents) 
      { 
       string[] tokens = line.Split(','); 
       string user = tokens[0]; 
       string pass = tokens[1]; 
       username = user; 
       password = pass; 
      } 

      // Get the object used to communicate with the server. 
      FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://199.199.199.199/Plovdiv.txt"); 
       request.Method = WebRequestMethods.Ftp.UploadFile; 

       // This example assumes the FTP site uses anonymous logon. 
       request.Credentials = new NetworkCredential(username, password); 
+0

ist dies, weil Sie die Variablen initialisieren würden aber eingestellt keinen Wert für Sie. Sie sollten ihnen einen Anfangswert zuweisen. Z.B. 'string username =" "; string password = ""; ' –

Antwort

1

Der Compiler weiß nicht, ob die Schleife, wird ausgeführt, oder nicht, deshalb zeigt es solche Warnungen, dh. Die Schleife kann oder nicht ausgeführt werden, wenn es die Iteration überspringt (lineOfContents ist Null oder es hat keine Werte), dann Ihre lokalen Variablen username und password werden nicht initialisiert und das führt zu Exceptions, um zu vermeiden, dass Sie sie initialisieren müssen einige Standardwerte, so wäre die Erklärung wie folgt aus:

string username = ""; // String.Empty or some default values 
string password = ""; 
// rest of code here 
1

Sie Werte zuweisen username und password innerhalb der foreach Schleife, aber der Compiler nicht weiß, ob lineOfContents nicht leer ist, und wenn Sie erreichen zu request.Credentials = new NetworkCredential(username, password); die Variablen haben einen beliebigen Wert. Sie müssen sie

string username = string.Empty; 
string password = string.Empty; 
+0

Danke Leute .. –

1

Ihre aktuellen Code hat falsche Logik initialisieren:

  1. Was passiert, wenn C:\M\send.txt Datei ist leer: foreach nicht Schleife überhaupt und username, passwordMüll enthalten
  2. Warum schleifen Sie über die gesamte Datei? Es ist die letzte Zeile der Datei, die schließlich dem username, password zugewiesen wird.

Im Fall, dass Sie die vorhandene Logik erhalten (analysieren und die letzte Zeile der Datei zuweisen):

public static void Main() 
    { 
     var line = File 
      .ReadLines(@"C:\\M\send.txt") // We don't want All lines to be in memory 
      .LastOrDefault(); 

     string username = ""; // or null 
     string password = ""; // or null 

     if (line != null) 
     { 
      string[] tokens = line.Split(','); 
      string user = tokens[0]; 
      string pass = tokens[1]; 
      username = user; 
      password = pass; 
     } 
     //TODO: you may want to add "else" here (i.e. the file is empty case)