Если бы вы знали, что длина условий, о которых вы заботитесь, была бы одинаковой длины, вы могли бы:
switch(mystring.substring(0, Math.Min(3, mystring.Length))
{
case "abc":
//do something
break;
case "xyz":
//do something else
break;
default:
//do a different thing
break;
}
Имеется Math.Min(3, mystring.Length)
, чтобы строка длиной менее 3 символов не вызывала исключение при операции с подстрокой.
Существуют расширения этой техники, например, для соответствия. связка из двухсимвольных строк и связка из трехсимвольных строк, где за некоторыми сопоставлениями из двухсимвольных сравнений следует сравнение из трехсимвольных сравнений. Если только у вас не очень большое количество таких строк, оно быстро становится менее эффективным, чем простая цепочка if-else как для работающего кода, так и для человека, который должен его поддерживать.
Редактировать: Добавлено, поскольку вы заявили, что они будут разной длины. Вы могли бы сделать шаблон, который я упомянул, для проверки первых символов X, а затем следующих символов Y и т. Д., Но если не существует шаблона, в котором большинство строк имеют одинаковую длину, это будет неэффективно и ужасно для поддержания (классический случай преждевременной пессимизации).
Шаблон команды упоминается в другом ответе, поэтому я не буду вдаваться в подробности этого, так же как и в случае, когда вы отображаете строковые шаблоны в идентификаторы, но они являются опцией.
Я бы не стал переходить от цепочек if-else к шаблонам команд или отображений для получения переключателя эффективности иногда имеет преимущество над if-else, поскольку вы теряете больше в сравнениях для команды или получении шаблона ID , Я бы сделал так, если бы код стал понятнее.
Цепочка if-else может работать довольно хорошо, либо со сравнением строк, либо с регулярными выражениями (последнее, если у вас есть сравнения более сложные, чем сопоставления префиксов, что, вероятно, будет проще и быстрее, я упоминание рег-экс только потому, что они иногда хорошо работают с более общими случаями такого рода паттернов).
Если вы выбираете if-elses, попробуйте рассмотреть, какие случаи будут происходить чаще всего, и сделайте эти тесты более ранними, чем тесты для менее распространенных случаев (хотя, конечно, стоит рассмотреть вариант «начинается с abcd») потому что это должно быть проверено перед "начинается с abc").