Есть ли функция.NET для проверки имени класса?

Я использую CodeDom для генерации динамического кода на основе пользовательских значений. Одно из этих значений управляет именем класса, который я генерирую. Я знаю, что мог бы стерилизовать имя на основе правил языка о допустимых именах классов с помощью регулярных выражений, но я хотел бы знать, есть ли специальный встроенный метод для проверки и / или стерилизации имени класса.

4 ответа

Решение

Простой способ определить, является ли строка допустимым идентификатором для класса или переменной, - вызвать статический метод.

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 и ниже. Таким образом, я могу вызвать это сразу после того, как я создаю свой CodeTypeDeclaration class1 для проверки только имени класса, или я могу создать свой CodeDom и затем вызвать его в конце, чтобы проверить все идентификаторы в моем дереве. Как раз то, что мне было нужно!

public static bool IsReservedKeyWord(string identifier)
        {
            Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
            return csharpProvider.IsValidIdentifier(identifier);
        }
Другие вопросы по тегам