У меня есть этот фрагмент кода:
if (filter != RECENT &&
filter != TODAY &&
filter != WEEK &&
filter != MONTH &&
filter != ALLTIME)
{
filter = RECENT;
}
Обратите внимание, что filter
является string
и сравнивается с const string
типами. Есть ли способ сделать это встроенным и сделать его более читаемым? Выполнение этого с тернарным оператором не делает его намного лучше, так как мне все еще нужно повторить filter != XXXXX
filter = filter != RECENT &&
filter != TODAY &&
filter != WEEK &&
filter != MONTH &&
filter != ALLTIME ? RECENT : filter;
а это явно не работает
filter = filter != RECENT && TODAY && WEEK && MONTH && ALLTIME ? RECENT : filter;
Есть ли более красивый способ (красивее == вся логика должна быть в одной строке кода) для этого сравнения? Точнее, чтобы предотвратить filter != XXXXX
повторение.
Обратите внимание, что производительность не является моей главной задачей в этом вопросе.
Filter
. Это перечисление? Если да, то это перечисление с атрибутом[Flags]
? - person   schedule 27.10.2018filter
всего лишьstring
. Он сравнивается с константами, например.const string RECENT = "recent";
. - person Boško Bezik   schedule 27.10.2018params string[] ...
(аргументомparams string[]
будет массив строк, о котором я говорил), вы можете упростить тестирование до чего-то вродеfilter.IsNot(Filter.RECENT, Filter.TODAY, ...)
- person   schedule 27.10.2018!array.Contains(filter)
или рассмотрите возможность использования перечисления, как предложил elgonzo. Мы не знаем вашего приложения, но из того, что мы знаем, это может быть лучше, чем сравнение строк. - person just-my-name   schedule 27.10.2018filter
— этоstring
параметр, передаваемый методу. Создание перечислений создало бы мне больше работы. Я использовал ваше решение...Contains(filter)...
, и оно прекрасно работает. - person Boško Bezik   schedule 27.10.2018filter = new[]{RECENT, TODAY, WEEK, MONTH, ALLTIME}.Contains(filter) ? filter : RECENT;
решил мою проблему. - person Boško Bezik   schedule 27.10.2018