Лучший отвечающий
Switch

Вопрос
-
Здравствуйте форумчане!
Пишу обработчик команд для приложения, и столкнулся с такой вот проблемкой...
Неполучается реализовать через конструктор 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