#c#
#c#
Вопрос:
У меня есть файл configuration .xml, который содержит следующие ключи:
<add key="key1" value="D1"/>
<add key="key2" value="D2"/>
<add key="key3" value="D3"/>
<add key="key4" value="D4"/>
<add key="key5" value="D5"/>
Теперь мне нужно, чтобы эти ключи использовались здесь, поэтому я попробовал это, но не работает:
string k1 = System.Configuration.ConfigurationManager.AppSettings["key1"];
string k2 = System.Configuration.ConfigurationManager.AppSettings["key2"];
string k3 = System.Configuration.ConfigurationManager.AppSettings["key3"];
string k4 = System.Configuration.ConfigurationManager.AppSettings["key4"];
string k5 = System.Configuration.ConfigurationManager.AppSettings["key5"];
Keys Key1 = (Keys)Enum.Parse(typeof(Keys), k1);
Keys Key2 = (Keys)Enum.Parse(typeof(Keys), k2);
Keys Key3 = (Keys)Enum.Parse(typeof(Keys), k3);
Keys Key4 = (Keys)Enum.Parse(typeof(Keys), k4);
Keys Key5 = (Keys)Enum.Parse(typeof(Keys), k5);
switch (e.KeyCode)
{
case Keys.Key1:
//something happens here
break;
case Keys.Key2:
//something happens here
break;
case Keys.Key3:
//something happens here
break;
case Keys.Key4:
//something happens here
break;
case Keys.Key5:
//something happens here
break;
}
Это ошибки, которые я получаю:
Error 1 'System.Windows.Forms.Keys' does not contain a definition for 'Key1'
Error 2 'System.Windows.Forms.Keys' does not contain a definition for 'Key2'
Error 3 'System.Windows.Forms.Keys' does not contain a definition for 'Key3'
Error 4 'System.Windows.Forms.Keys' does not contain a definition for 'Key4'
Error 5 'System.Windows.Forms.Keys' does not contain a definition for 'Key5'
Что я делаю не так?
Комментарии:
1. @mclaassen уверен на 100%.
2. @dotnetstep msdn.microsoft.com/en-us/library/system.windows.forms.keys.aspx
Ответ №1:
В этом случае вы не сможете использовать оператор switch . Невозможно получить значения регистра, значение которого инициализируется во время выполнения. Для случая переключения требуется постоянное значение, а константы должны быть постоянными во время компиляции.
Вместо этого используйте if
оператор и else if
т. Д. И Просто сравните строковые значения из вашей конфигурации со KeyCode.ToString()
значением.
Ответ №2:
Ваши Key1
, Key2
, и т.д. — это просто переменные, Keys
а не члены перечисления. Используйте их как переменные, т.е.
switch (e.KeyCode)
{
case Key1:
//something happens here
break;
case Key2:
//something happens here
break;
РЕДАКТИРОВАТЬ: поскольку этот код недействителен, switch
оператор не является опцией. Вам придется использовать if
… else if
:
if (e.KeyCode == Key1)
{
//something happens here
}
else if (e.KeyCode == Key2)
{
//something happens here
}
Комментарии:
1. Это все равно не сработает, не так ли? Регистры в switch должны быть константами.
2. @jmcilhinney Это не решение:
Error 1 A constant value is expected
3. Черт возьми! Слишком привык к VB.NET
Select Case
заявления. Это, очевидно, означает, что вы не можете использовать aswitch
, потому что вы не используете постоянные значения, поэтому вам нужно использоватьif
…else if
инструкции.