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