在C#类中切换语句

时间:2016-03-24 23:45:25

标签: c# switch-statement globals

我有一个带有xml配置文件的csharp应用程序,其中包含一个名为" environment"可以设置为不同的值(例如开发/测试/生产)。

修改此配置文件条目后,应用程序中生成的全局变量应全部更改。我在我的应用程序中有一个名为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个变量。)

这不起作用我遇到了多个错误:

无效令牌'切换'在类,结构或接口成员声明中 无效的令牌')'在类,结构或接口成员声明中 无效的令牌'案例'在类,结构或接口成员声明中

还有其他方法吗?

由于 布拉德

4 个答案:

答案 0 :(得分:2)

str

答案 1 :(得分:1)

基于错误,编译器认为它是在类的主体内编码的。尝试在方法或其他方法中移动逻辑,这可能是由于你的switch语句中的访问修饰符 - 例如。公共静态等

答案 2 :(得分:1)

  1. public static应该在类范围内声明,而不是在函数内声明。
  2. 您可以在声明行或静态构造函数中初始化静态变量。
  3. 你忘了在每个案件结束时放置"休息。
  4. 所以代码应该像这样:

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

    }

答案 3 :(得分:0)

尝试在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;