c# is и or для непостоянных переменных
Только что благодаря Resharper'у узнал о такой замечательной штуке как is и or, которые позволяют писать не так
if((SomeStringWithLongName=="true")||(SomeStringWithLongName=="yes")||(SomeStringWithLongName=="да")||(SomeStringWithLongName=="1")) Do();
а так!
if(SomeStringWithLongName is "true" or "yes" or "да" or "1") Do();
Но is и or можно использовать только для постоянных значений, а есть ли подобные штуки, которые позволяют сократить написание таких конструкций для непостоянных переменных? Например:
if((SomeVariableWithLongName==Var1)||(SomeVariableWithLongName==Var2)||(SomeVariableWithLongName==Var3)||(SomeVariableWithLongName==Var4)) Do();
где Var# – непостоянные строки или другие сравнимые типы
Ответы (1 шт):
Нет, к сожалению, pattern-matching работает лишь с константными значениями.
Но можно, например, написать так:
if (new[] { Var1, Var2, Var3, Var4 }.Contains(SomeStringWithLongName)) Do();
Это немножко менее эффективно, т. к. создаёт лишний массив и копирует в него значения, но обычно такой неэффективностью можно пренебречь.
Ещё одна разница — это то, что массив + Contains вычисляет значения выражений Var1, ... энергично (то есть, все и сразу), а || лениво (то есть, только те, что надо и тогда, когда понадобились) вследствие short-circuit-логики. Для случая простых переменных это, разумеется, не большая проблема, а вот для сложных выражений могут быть нюансы тонкости.