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 шт):

Автор решения: VladD

Нет, к сожалению, pattern-matching работает лишь с константными значениями.

Но можно, например, написать так:

if (new[] { Var1, Var2, Var3, Var4 }.Contains(SomeStringWithLongName)) Do();

Это немножко менее эффективно, т. к. создаёт лишний массив и копирует в него значения, но обычно такой неэффективностью можно пренебречь.


Ещё одна разница — это то, что массив + Contains вычисляет значения выражений Var1, ... энергично (то есть, все и сразу), а || лениво (то есть, только те, что надо и тогда, когда понадобились) вследствие short-circuit-логики. Для случая простых переменных это, разумеется, не большая проблема, а вот для сложных выражений могут быть нюансы тонкости.

→ Ссылка