Как преобразовать строку из файла конфигурации в читаемый ключ?

#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 заявления. Это, очевидно, означает, что вы не можете использовать a switch , потому что вы не используете постоянные значения, поэтому вам нужно использовать if else if инструкции.