Вопрос

Я использую 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);
        }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top