C# 中的 Switch 语句 Class
Switch Statement in C# Class
我有一个带有 xml 配置文件的 csharp 应用程序,其中包含一个名为 "environment" 的元素,可以将其设置为不同的值(例如 development/test/production)。
修改此配置文件条目后,应用程序中生成的全局变量应该全部更改。我在我的应用程序中有一个名为 Globals 的 class,我正在存储全局变量。我想给它添加一个 case/switch 元素,但它似乎不起作用。
例如,我在全局变量 class 的顶部定义了以下内容:
public static string environment = MyApp.Properties.Settings.Default.Environment;
然后在我的 class 中降低我正在尝试执行以下操作:
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 个变量。)
这不起作用我收到多个错误:
class、结构或接口成员声明中的无效标记 'switch'
class、结构或接口成员声明中的无效标记“)”
class、结构或接口成员声明
中的无效标记 'case'
还有其他方法吗?
谢谢
布拉德
根据错误,编译器认为它是在 class 的正文中编码的。尝试将逻辑移动到一个方法或类似的方法中,这可能是由于您在 switch 语句中使用了访问修饰符 - 例如。 public 静态等
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
}
}
}
- public static 应该在 class 范围内声明,而不是在函数内声明。
- 您可以在声明行或静态构造函数中初始化静态变量。
- 您忘记在每个案例的末尾加上“break”。
所以代码应该是这样的:
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
结构。
对于您的情况,最好将 Server
和 Username
定义为属性,并在静态 class 的静态构造函数中从对象中定义这些值。例如:
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;
我有一个带有 xml 配置文件的 csharp 应用程序,其中包含一个名为 "environment" 的元素,可以将其设置为不同的值(例如 development/test/production)。
修改此配置文件条目后,应用程序中生成的全局变量应该全部更改。我在我的应用程序中有一个名为 Globals 的 class,我正在存储全局变量。我想给它添加一个 case/switch 元素,但它似乎不起作用。
例如,我在全局变量 class 的顶部定义了以下内容:
public static string environment = MyApp.Properties.Settings.Default.Environment;
然后在我的 class 中降低我正在尝试执行以下操作:
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 个变量。)
这不起作用我收到多个错误:
class、结构或接口成员声明中的无效标记 'switch'
class、结构或接口成员声明中的无效标记“)”
class、结构或接口成员声明
还有其他方法吗?
谢谢 布拉德
根据错误,编译器认为它是在 class 的正文中编码的。尝试将逻辑移动到一个方法或类似的方法中,这可能是由于您在 switch 语句中使用了访问修饰符 - 例如。 public 静态等
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
}
}
}
- public static 应该在 class 范围内声明,而不是在函数内声明。
- 您可以在声明行或静态构造函数中初始化静态变量。
- 您忘记在每个案例的末尾加上“break”。
所以代码应该是这样的:
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
结构。
对于您的情况,最好将 Server
和 Username
定义为属性,并在静态 class 的静态构造函数中从对象中定义这些值。例如:
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;