Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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);
        }