Я использую CodeDom для генерации динамического кода на основе пользовательских значений. Одно из этих значений определяет, какое имя генерирует класс. Я знаю, что могу стерилизовать имя на основе языковых правил о допустимых именах классов с использованием регулярных выражений, но я хотел бы знать, существует ли какой-либо конкретный метод, встроенный в фреймворк, для проверки и/или стерилизации имени класса.
Есть ли функция .NET для проверки имени класса?
Ответ 1
Простым способом определить, является ли строка допустимым идентификатором для класса или переменной, является вызов статического метода
System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentIdentifier(string value)
Ответ 2
Используйте метод CreateValidIdentifier
в классе CSharpCodeProvider
.
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
string sFixedName = codeProvider.CreateValidIdentifier("somePossiblyInvalidName");
CodeTypeDeclaration codeType = new CodeTypeDeclaration(sFixedName);
Он возвращает правильное имя с некоторым вводом. Если вы просто хотите проверить имя и не исправить его, сравните ввод и вывод. Он не будет изменять действительный вход, поэтому выход будет эквивалентным.
Ответ 3
Я нашел ответ на свой вопрос. Я могу позвонить
CodeCompiler.ValidateIdentifiers(class1);
где class1 является CodeObject для проверки всех идентификаторов в этом дереве CodeDom и ниже. Поэтому я могу назвать это сразу после того, как создаю свой класс CodeTypeDeclaration class1, чтобы проверить только имя класса, или я могу создать свой CodeDom, а затем вызвать это в конце, чтобы проверить все идентификаторы в моем дереве. Просто то, что мне нужно!
Ответ 4
public static bool IsReservedKeyWord(string identifier)
{
Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
return csharpProvider.IsValidIdentifier(identifier);
}