none
Switch RRS feed

  • Вопрос

  • Здравствуйте форумчане!

    Пишу обработчик команд для приложения, и столкнулся с такой вот проблемкой...

    Неполучается реализовать через конструктор Switch обработку метода String.StartsWith() или String.Contains(). т.е. грубо говоря, мне нужно чтобы если строка начинается или содержит в себе определенный символ или слово (фразу), выполнялось действие А, другое слово - действие В и т.д. мне нужно сгородить что-то вроде такого - Switch (String.StartsWith("Test")), на что компилятор матерится на чем свет стоит, говорит не можно так...

    Подскажите как мне это реализовать.

    • Перемещено Tagore Bandlamudi 3 октября 2010 г. 0:30 MSDN Forums consolidation (От:Форум по .NET Framework)
    12 июня 2010 г. 16:56

Ответы

  • Ну так StartWit, впрочем, как и Contains возвращают bool, так что свичи с их участием - это ifы. Так, что как вариант - каскад ифов. Некрасиво, но действенно.

        static void Main(string [] args)
        {
          foreach (string param in args)
          {
            if (param.StartsWith("hello"))
            {
              Console.WriteLine("Hello-параметр");
              if (param.Contains("vasia"))
              {
                Console.WriteLine("Hello-Vasia-параметр");
              }
              else if (param.Contains("petia"))
              {
                Console.WriteLine("Hello-Petia-параметр");
              }
              else
              {
                Console.WriteLine("Hello-Unknown-параметр");          
              }
    
            }
            else if (param.StartsWith("bay"))
            {
              Console.WriteLine("Bay-параметр");        
            }
            else 
            {
              Console.WriteLine("Просто параметр");        
            }        
          }      
        }

    • Помечено в качестве ответа JusteG 14 июня 2010 г. 3:01
    13 июня 2010 г. 17:19
    Модератор
  • Ну или эту кашу можно разбавить Extension'ом, для лучшей читаемости. Сам класс:

      public static class ArgsExtensions
      {
        public static bool ArgContains(this string[] args, string temlate)
        {
    
          foreach (string s in args)
          {
            if (s.Contains(temlate))
              return true;
          }
          return false;
        }
    
        public static bool ArgStartWith(this string[] args, string temlate)
        {
          foreach (string s in args)
          {
            if (s.StartsWith(temlate))
              return true;
          }
          return false;
        }
    
      }

    И тогда можно сразу со всем массивом аргументов работать:

          if (args.ArgStartWith("hello")) Console.WriteLine("Есть параметр начинающийся с hello");
          if (args.ArgContains("bye")) Console.WriteLine("Есть параметр содержащий bye");

    • Помечено в качестве ответа JusteG 14 июня 2010 г. 3:01
    13 июня 2010 г. 18:14
    Модератор

Все ответы

  • Вот такой вариант компилятор сглатывает не возмущаясь:

          string s = "teststring";
          switch (s.StartsWith("test"))
          {
            case (true): 
              Console.WriteLine("Да");
              break;
            case (false):
              Console.WriteLine("Нет");
              break;
            default:
              Console.WriteLine("Где-то выше скорее всего произошел Exception");
              break;
          }

    12 июня 2010 г. 19:30
    Модератор
  • Извиняюсь за некорректно заданный вопрос, мне нужно что-то вроде вот этого:

     

      string s, x;
      switch (s.StartsWith(x))
      {
      case (x == "Hello"): 
       Console.WriteLine("Да");
       break;
      case (x == "Bye"):
       Console.WriteLine("Нет");
       break;
      default:
       Console.WriteLine("Где-то выше скорее всего произошел Exception");
       break;
      }
    Блин, снова не то... В общем мне нужно что-бы в зависимости от того с чего начинается строчка, выполнялся тот или иной "case", причем тоже самое надо соорудить по условию что строчка не начинается, а содержит, т.е. в зависимости от того какое слово или предложение содержит строчка, выполняется соответствующий "case". Вот.
    13 июня 2010 г. 4:32
  • Ну так StartWit, впрочем, как и Contains возвращают bool, так что свичи с их участием - это ifы. Так, что как вариант - каскад ифов. Некрасиво, но действенно.

        static void Main(string [] args)
        {
          foreach (string param in args)
          {
            if (param.StartsWith("hello"))
            {
              Console.WriteLine("Hello-параметр");
              if (param.Contains("vasia"))
              {
                Console.WriteLine("Hello-Vasia-параметр");
              }
              else if (param.Contains("petia"))
              {
                Console.WriteLine("Hello-Petia-параметр");
              }
              else
              {
                Console.WriteLine("Hello-Unknown-параметр");          
              }
    
            }
            else if (param.StartsWith("bay"))
            {
              Console.WriteLine("Bay-параметр");        
            }
            else 
            {
              Console.WriteLine("Просто параметр");        
            }        
          }      
        }

    • Помечено в качестве ответа JusteG 14 июня 2010 г. 3:01
    13 июня 2010 г. 17:19
    Модератор
  • Ну или эту кашу можно разбавить Extension'ом, для лучшей читаемости. Сам класс:

      public static class ArgsExtensions
      {
        public static bool ArgContains(this string[] args, string temlate)
        {
    
          foreach (string s in args)
          {
            if (s.Contains(temlate))
              return true;
          }
          return false;
        }
    
        public static bool ArgStartWith(this string[] args, string temlate)
        {
          foreach (string s in args)
          {
            if (s.StartsWith(temlate))
              return true;
          }
          return false;
        }
    
      }

    И тогда можно сразу со всем массивом аргументов работать:

          if (args.ArgStartWith("hello")) Console.WriteLine("Есть параметр начинающийся с hello");
          if (args.ArgContains("bye")) Console.WriteLine("Есть параметр содержащий bye");

    • Помечено в качестве ответа JusteG 14 июня 2010 г. 3:01
    13 июня 2010 г. 18:14
    Модератор
  • Спасибо за помощь! Жаль что Swich'ем нельзя (
    14 июня 2010 г. 3:01