Нарушение FXCop CA1716 IdentifiersShouldNotMatchKeyword

Недавно мы начали использовать FxCop в нашей кодовой базе, и я сейчас оцениваю проблемы. Одним из них является проблема IdentifiersShouldNotMatchKeywords. Это относится к пространству имен company.blah.Event, которое он хочет, чтобы я изменил на что-то другое, поскольку событие является ключевым словом. В документах говорится:

Когда подавлять предупреждения Не подавляйте предупреждение из этого правила. Библиотека может использоваться не на всех доступных языках в .NET Framework.

в каких случаях он может быть недоступен? Нужно ли мне это менять? Я думаю, что это не будет очень популярным.


person Sam Holder    schedule 03.03.2010    source источник


Ответы (2)


Разные языки имеют разные ключевые слова. Например, я могу использовать If в качестве переменной в C#, но если кто-то загрузит проект в VB, они облажались, любой подобный случай может вызвать проблемы.

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

person Nick Craver    schedule 03.03.2010

Ну, это немного странное сообщение. Он утверждает, что знает, какими будут ключевые слова на еще не написанном языке. Насколько вам известно, будущий язык, такой как BrainFart, может использовать Acme в качестве ключевого слова, и вы облажались, потому что это название вашей компании.

Однако есть заметная разница между ключевыми словами Acme и Event. Автор языка BrainFart укажет, что вы должны были знать о том, что Event представляет собой проблему, запуская свой код через FxCop. Она выиграет этот спор.

Ты лучше поменяй.

person Hans Passant    schedule 03.03.2010
comment
Если вы посмотрите на мой пример, он применим и к текущим языкам. Напишите библиотеку на С#... создайте проект VB.Net, укажите ссылку на эту сборку С#.... немедленные проблемы с использованием этого идентификатора, если это ключевое слово. - person Nick Craver; 03.03.2010
comment
@Nick: Я не воспроизвожу это, компилятор VB.NET по-прежнему обрабатывает If как контекстное ключевое слово. Это компилируется нормально: Dim obj2 As New CSharp.If.Class1. Но смысл моего поста был не в этом. - person Hans Passant; 03.03.2010