我正在做一个小C#程序,但它是可配置的。 Properties.Settings.Default.foobar
等于F3
,但可能会发生变化。最初它是这样的:
case Keys.F3:
//dostuff
break;
但我需要Properties.Settings.Default.foobar
代替F3
,因为它是一个设置,因此可能会发生变化。
case Keys.Properties.Settings.Default.foobar:
显然不起作用,也没有用括号括起来,所以我不确定。我显然是C#的新手,所以有任何帮助吗?
该程序使用未聚焦的热键,但这些键是用户可配置的,所以对于一个案例我不能有任何常量/静态,对吗?
答案 0 :(得分:1)
case Keys.Properties.Settings.Default.foobar:
正如你所说,这显然不起作用。具体原因是case
语句的值必须是编译时常量。
更简单的if
比较可能会更好。由于您的值为Keys
且您的属性为string
,因此您需要将一种类型转换为另一种类型进行比较。为简单起见,我会转换为字符串,或者您可以convert the string to the enum type。
if (myVar.ToString() == Properties.Settings.Default.foobar)
所以没有,例如</ p>
switch (myVar) {
case Keys.F1:
// something
case Keys.F2:
// something
}
你会:
if (myVar.ToString() == Properties.Settings.Default.foo) {
// something
} else if (myVar.ToString() == Properties.Settings.Default.bar) {
// something
}
答案 1 :(得分:0)
Keys.F3
是Keys
枚举的值。因此,您还需要将Properties.Settings.Default.foobar
字符串转换为枚举值。
幸运的是,有一种内置方法可以做到这一点:
var foobarKey = (Keys)Enum.Parse(typeof(Keys), Properties.Settings.Default.foobar);
...
if (whatever == foobarKey)
{
...