2016-03-24 11 views
-1

Ich habe eine csharp App mit einer XML-Konfigurationsdatei, die ein Element namens "Umgebung" enthält, das auf verschiedene Werte gesetzt werden kann (zB Entwicklung/Test/Produktion).Switch-Anweisung in C# Klasse

Wenn dieser Konfigurationsdateieintrag geändert wird, sollten sich die resultierenden globalen Variablen in der Anwendung ändern. Ich habe in meiner Anwendung eine Klasse namens Globals, in der ich globale Variablen speichere. Ich möchte ein case/switch-Element hinzufügen, aber es scheint nicht zu funktionieren.

So zum Beispiel habe ich folgendes an der Spitze der Globals-Klasse definiert:

public static string environment = MyApp.Properties.Settings.Default.Environment; 

Dann weiter unten in meiner Klasse versuche ich folgendes zu tun:

switch (environment) 
    { 
     case "development": 
      public static string Server = "SQL1"; 
      public static string Username = "dev.user"; 
     case "test": 
      public static string Server = "SQL2"; 
      public static string Username = "test.user"; 
     case "production": 
      public static string Server = "SQL3"; 
      public static string Username = "prod.user"; 
     default: 
      public static string Server = "SQL1"; 
      public static string Username = "dev.user"; 
    } 

(Im obigen Beispiel habe ich die Anzahl der Variablen auf zwei reduziert, um es verständlicher zu machen, aber in Wirklichkeit gibt es wahrscheinlich 30 Variablen pro Umgebung.)

Dies funktioniert nicht ich mehrere Fehler erhalten:

Ungültige token 'Schalter' in Klasse, Struktur oder Interface-Memberdeklaration
ungültig token ')' in Klasse, Struktur oder Interface-Memberdeklaration ungültig Token 'Fall' in Klasse, Struktur oder Interface Member Deklaration

Gibt es eine andere Möglichkeit dies zu tun?

Dank Brad

+2

entfernen alles public static string in case-Anweisung, Top-Klasse deklarieren –

+0

Könnten Sie keine Standard-Config statt Transformationen verwenden? Web.Debug.Config, Web.Test.Config etc http://stackoverflow.com/questions/15683854/how-do-i-change-an-web-config-setting-using-transformation-syntax dies würde Ihnen auch geben die Möglichkeit, Werte zur Laufzeit zu ändern. – Macilquham

+0

Die definierten Variablen sollten nicht vom Benutzer geändert werden können - wir möchten, dass sie in der App fest codiert sind. Der Benutzer sollte nur in der Lage sein, die Umgebung aus der Konfigurationsdatei zu ändern. – Brad

Antwort

0

Try Definieren Sie Ihre Strings vor der switch-Anweisung. Für jeden Fall müssen Sie Definieren Sie eine break-Anweisung, um den Zeiger aus der Struktur switch herauszuholen.

Für Ihren Fall ist es eine gute Idee, die Server und Username als Eigenschaften und in einem statischen Konstruktor einer statischen Klasse definieren Sie diese Werte aus dem Objekt.Für Beispiel:

public static class Globals 
{ 
    // define properties 
    public static string Server { get; set; } 
    public static string Username { get; set; } 

    // encapsulate the Settings.Environment in a property 
    public public static string Environment 
    { 
     get { return MyApp.Properties.Settings.Default.Environment; } 
    } 

    // when the application starts, this static scope will execute! 
    static Globals() 
    { 
     switch (environment) 
     { 
      case "development": 
       Server = "SQL1"; 
       Username = "dev.user"; 
       break; 
      case "test": 
       Server = "SQL2"; 
       Username = "test.user"; 
       break; 
      case "production": 
       Server = "SQL3"; 
       Username = "prod.user"; 
       break; 
      default: 
       Server = "SQL1"; 
       Username = "dev.user"; 
     } 
    } 
} 

es nutzen zu können, rufen Sie einfach

var server = Globals.Server; 
var user = Globals.Username; 
1

auf der Grundlage des Fehlers der Compiler denkt, dass es im Inneren des Körpers der Klasse codiert. Versuchen Sie, die Logik in einer Methode oder ähnlichem zu verschieben. Dies kann auf Ihre Zugriffsmodifizierer innerhalb Ihrer switch-Anweisung zurückzuführen sein - z. public static etc

2
public static class Globals 
{ 
    public static string Environment = MyApp.Properties.Settings.Default.Environment; 
    public static string Server; 

    // rest of code 

    public static void LoadEnvironment() 
    { 
     switch (Environment) 
     { 
      case "development": 
      { 
       Server = "SQL1"; 
       Username = "dev.user"; 
       break; 
      } 

      // rest of code 
     } 
    } 
} 
1
  1. public static sollte, nicht innerhalb einer Funktion in der Klasse Umfang erklären werden.
  2. Sie können statische Variable entweder in der Deklarationszeile oder im statischen Konstruktor initialisieren.
  3. Sie haben vergessen, „Pause am Ende jeweils

So sollte der Code looke wie diese Puting.

public class MyClass 

{

public static string Server; 
public static string Username; 

static MyClass() 
{ 
    switch (environment) 
    { 
     case "development": 
      Server = "SQL1"; 
      Username = "dev.user"; 
      break; 

     case "test": 
      Server = "SQL2"; 
      Username = "test.user"; 
      break; 

     case "production": 
      Server = "SQL3"; 
      Username = "prod.user"; 
      break; 

     default: 
      Server = "SQL1"; 
      Username = "dev.user"; 
      break; 
    } 

} 

}