Определение, если перечисление значений находится в списке (C#)

Я полагаю, что проблема, с которой вы столкнулись, связана с

$('#myCarousel').carousel({
  interval: 3000,
  pause: null,
})

Вы передаете значение NULL в качестве параметра, когда он ожидает строку или логическое значение, вы можете увидеть эту ошибку из консоли.

enter image description here

(Ctrl + shift + I) на Chrome

Это должно быть

[114 ]

$('#myCarousel').carousel({
  interval: 3000,
  pause: false,
})




8
задан Nathan Koop 28 April 2009 в 13:48
поделиться

5 ответов

В Вашем текущем коде будет сказано, идет ли точно "дождь и грозовой". Чтобы узнать, идет ли "дождь и грозовой и возможно что-то еще", Вам нужно:

if ((currentWeather.Type & _badWeatherTypes) == _badWeatherTypes)

Чтобы узнать, идет ли "дождь или грозовой, и возможно что-то еще", Вам нужно:

if ((currentWeather.Type & _badWeatherTypes) != 0)

РЕДАКТИРОВАНИЕ (для полноты):

Было бы хорошо использовать FlagsAttribute, т.е. украсьте тип [Flags]. Это не необходимо ради этой поразрядной логики, но влияет как ToString() ведет себя. Компилятор C# игнорирует этот атрибут (по крайней мере в данный момент; спецификация C# 3.0 не упоминает это), но это обычно - хорошая идея для перечислений, которые являются эффективно флагами, и это документирует надлежащее использование типа. В то же время конвенция состоит в том что при использовании флагов, Вы pluralise перечислимое имя - таким образом, Вы изменили бы его на WeatherTypes (потому что любое фактическое значение является эффективно 0 или больше погодными типами).

Это также стоило бы думать о том, что "Солнечный" действительно означает. Это в настоящее время получало значение 0, что означает, что это - отсутствие всего остального; у Вас не могло быть его солнечный и льющийся дождем одновременно (который физически возможен, конечно). Не пишите код для запрещения радуг!;) С другой стороны, если в Вашем реальном варианте использования Вы действительно хотите значение, что означает "отсутствие всех других значений", затем Вы в порядке.

18
ответ дан 5 December 2019 в 08:01
поделиться

используйте FlagsAttribute. Это позволит Вам использовать перечисление в качестве небольшой маски.

1
ответ дан 5 December 2019 в 08:01
поделиться

Необходимо использовать атрибут Флагов на перечислении. Кроме того, также необходимо протестировать, чтобы видеть, установлен ли конкретный флаг:

(currentWeather.Type & WeatherType.Thunderstorm == WeatherType.Thunderstorm)

Это протестирует если currentWeather. Тип имеет WeatherType. Флаг Thunderstorm установлен.

0
ответ дан 5 December 2019 в 08:01
поделиться

Я не ограничил бы себя разрядным миром. Перечисления и побитовые операторы, как Вы узнали, не то же самое. Если бы Вы хотите решить это использование побитовые операторы, я придерживался бы просто их, т.е. не беспокоюсь перечислениями. Однако я был бы что-то как следующее:

        WeatherType[] badWeatherTypes = new WeatherType[]
        {   
            WeatherType.Thunderstorm, 
            WeatherType.Raining
        };

        if (Array.IndexOf(badWeatherTypes, currentWeather.Type) >= 0)
        {
                        return false;
        }
0
ответ дан 5 December 2019 в 08:01
поделиться

Необходимо использовать [Флаги] атрибут (проверка здесь) на перечислении; затем можно использовать поразрядно и проверять на отдельные соответствия.

0
ответ дан 5 December 2019 в 08:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: