簡體   English   中英

C#類中的Switch語句

[英]Switch Statement in C# Class

我有一個帶有xml配置文件的csharp應用程序,其中包含一個名為“環境”的元素,可以將其設置為不同的值(例如,開發/測試/生產)。

修改此配置文件條目后,應用程序中生成的全局變量將全部更改。 我的應用程序中有一個名為Globals的類,用於存儲全局變量。 我想向其中添加一個case / switch元素,但是它似乎無法正常工作。

因此,例如,我在globals類的頂部定義了以下內容:

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

然后在我的課堂上降低我要執行以下操作:

  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";
    }

(在上面的示例中,我將變量的數量減少到兩個,只是為了使其更易於理解,但實際上每個環境中可能有30個變量。)

這不起作用,我得到多個錯誤:

類,結構或接口成員聲明中的無效令牌“ switch”
類,結構或接口成員聲明中的無效令牌“)”無效

還有其他方法嗎?

謝謝布拉德

 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
        }
     }
}

基於該錯誤,編譯器認為它是在類的主體內進行編碼的。 嘗試將邏輯移至某個方法或某些方法中,這可能是由於switch語句內的訪問修飾符所致-例如。 公共靜態等

  1. public static應該在類范圍內聲明,而不是在函數內聲明。
  2. 您可以在聲明行中或在靜態構造函數中初始化靜態變量。
  3. 您忘記了在每個案例末尾都放置“中斷”。

因此,代碼應如下所示:

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;
    }

}

}

嘗試在switch語句之前定義您的字符串。 對於每種情況,都必須定義一個break語句,以使指針脫離switch結構。

對於您的情況,最好將ServerUsername定義為屬性,並在靜態類的靜態構造函數中,從對象中定義這些值。 樣品:

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";
        }
    }
}

要使用它,只需致電

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM