2014-12-20 2 views
3

Пример:Ошибка проверки инспектора кода?

Public Enum Vehicles As Integer 
    Car = 0 
    MotorBike = 1 
    Plane = 2 
End Enum 

Чтобы получить значение каждого участника транспортного средства (0, 1, 2) Я предполагаю, что я должен бросить это так:

DirectCast(Vehicles.Car, Integer) 

Это прекрасно работает, однако, Resharper производит это предупреждение по intellisense:

«Нельзя выразить выражение типа Транспортные средства для ввода целого числа»

Почему это? Это ошибка? Есть ли другой способ для меня получить ценность каждого члена без преобразования? (Cint и т. Д.)

ответ

2

Во-первых, соглашение диктует, что ваше перечисление должно быть названо Vehicle, то есть единственным, а не Vehicles, то есть множественным числом. Вы должны использовать только множественное имя для перечисления, если вы используете полномочия 2 для значений и применяете атрибут Flags, тем самым позволяя переменной этого типа одновременно сохранять несколько значений, например.

Очевидно, что это подходит в данном конкретном случае, но есть много перечислений, объявленных таким образом.

Что касается вопроса, это, вероятно, ошибка в ReSharper, потому что код VB компилируется и запускается без проблем. Я предполагаю, что, когда используется DirectCast, ReSharper ищет прямое отношение наследования или реализации, которое он не найдет в случае перечислений и интегральных типов. Если вы используете CInt, вместо этого вы не получите этого предупреждения, потому что CInt не требует таких отношений.

+0

Мне не нужен атрибут flags в этом случае, но эта сила двух вещей, я никогда не думал об этом;) Я предпочитаю использовать DirectCast tho, не позволяет мне делать ошибки во время компиляции и использовать правильные типы, так как CInt попытается преобразовать почти все в целое ... Я просто хотел проверить и поделиться этой «ошибкой», возможно, она будет исправлена ​​в будущей версии или, может быть, в текущем, так как я получил более старую (8,2). Спасибо за объяснение, на данный момент, я верю, что отключу проверку кода для этого случая. – SomeNickName

+0

Я использую R # 9, и я вижу такое же поведение. Если вы обнаружили проблему, вы должны сообщить об этом JetBrains, чтобы они могли ее исправить. Я проверил, и литье отлично работает на C#. – jmcilhinney

+0

. Если вы хотите, чтобы одна переменная могла хранить несколько значений одновременно, вы бы использовали только 2 аргумента, и если вы хотите, то вы должны применить атрибут «Флаги». Они идут рука об руку. – jmcilhinney

Смежные вопросы