Как мне включить позиции массива в оператор switch-case? - PullRequest
1 голос
/ 11 июня 2019

Мне нужно включить положения массива, например, положение [0], положение [1] и т. Д. В корпус коммутатора.

Я новичок в программировании, и я начинаю с C #, поэтому я попытался создать очень простой массив для этого оператора switch, но все, что я пробовал, не работало. Это то, что я до сих пор:

                string[] wordme = { "me", "myself", "i" };
                switch (wordme)
                {
                    case wordme[0]:
                        Me("me"); //refers to method
                        continue;
                    case wordme[1]:
                        Myself("myself"); //refers to method
                        continue;
                    case wordme[2]:
                        I("i");//refers to method
                        continue;
                    default:
                        continue;

                }

Я ожидал, что он будет ссылаться на методы, но вместо этого он не запустится из-за 3 сообщений об ошибках, все из которых ссылаются на строки case, читая: «Невозможно неявно преобразовать тип 'string' в 'string []'"

Ответы [ 2 ]

2 голосов
/ 11 июня 2019

Я не совсем уверен, что вы пытаетесь сделать, или зачем вам это нужно.Однако вы можете использовать , когда контекстное ключевое слово

Начиная с C # 7.0, метки прецедентов больше не должны быть взаимоисключающими, и порядок, в котором метки прецедентов появляются в операторе switchможет определить, какой блок переключателя выполняется.Ключевое слово when можно использовать для указания условия фильтра, в результате которого соответствующая метка регистра будет иметь значение true, только если условие фильтра также имеет значение true

string[] wordme = { "me", "myself", "i" };

for (int i = 0; i < wordme.Length; i++)
{
   switch (wordme[i])
   {
      case "me" when i == 0:
         Me("me"); //refers to method
         break;
      case "myself" when i == 1:
         Myself("myself"); //refers to method
         break;
      case "i" when i == 2:
         I("i"); //refers to method
         break;
      default:
         break;

   }
}

Или другое предположение

string[] wordme = { "me", "myself", "i" };

var mapping = new Dictionary<(string key, int ID), Action<string>> { 
       {("me", 0), s => Me(s)},
       {("myself", 1), s => Myself(s)},
       {("i", 2), s => I(s) }};

for (var i = 0; i < wordme.Length; i++)
   if (mapping.TryGetValue((wordme[i], i), out var action))
      action(wordme[i]);
0 голосов
/ 11 июня 2019

Пожалуйста, проверьте этот путь! foreach (var item в wordme) Console.WriteLine (item);

...