Microsoft.CSharp.CSharpCodeGenerator
имеет метод IsKeyword(string)
, который делает именно это. Однако этот класс является внутренним, поэтому для доступа к нему необходимо использовать отражение, и нет гарантии, что он будет доступен в будущих версиях .NET Framework. Обратите внимание, что IsKeyword
не заботится о различных версиях C #.
Публичный метод System.CodeDom.Compiler.ICodeGenerator.IsValidIdentifier(string)
также отклоняет ключевые слова. Недостатком является то, что этот метод также выполняет некоторые другие проверки, поэтому другие строки, не являющиеся ключевыми словами, также отклоняются.
Обновление: Если вам просто нужно создать действительный идентификатор, а не решать, является ли конкретная строка ключевым словом, вы можете использовать ICodeGenerator.CreateValidIdentifier(string)
. Этот метод также обрабатывает строки с двумя ведущими подчеркиваниями , добавляя к ним еще одно подчеркивание. То же самое относится и к ключевым словам. Обратите внимание, что ICodeGenerator.CreateEscapedIdentifier(string)
ставит такие строки перед знаком @
.
Идентификаторы, начинающиеся с двух ведущих символов подчеркивания, зарезервированы для реализации (т. Е. Компилятор C # и связанные генераторы кода и т. Д.), Поэтому, как правило, избегать таких идентификаторов из кода.
Обновление 2: Причина, по которой ICodeGenerator.CreateValidIdentifier
предпочтительнее, чем ICodeGenerator.CreateEscapedIdentifier
, заключается в том, что __x
и @__x
- это, по сути, один и тот же идентификатор. Следующее не скомпилируется:
int __x = 10;
int @__x = 20;
В случае, если компилятор будет генерировать и использовать идентификатор __x
, а пользователь будет использовать @__x
в результате вызова CreateEscapedIdentifier
, произойдет ошибка компиляции. При использовании CreateValidIdentifier
эта ситуация предотвращается, потому что пользовательский идентификатор превращается в ___x
(три подчеркивания).