Есть ли функция .NET для проверки имени класса? - PullRequest
22 голосов
/ 18 сентября 2008

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

Ответы [ 4 ]

26 голосов
/ 18 сентября 2008

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

System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentIdentifier(string value)
8 голосов
/ 18 сентября 2008

Используйте метод CreateValidIdentifier в классе CSharpCodeProvider.

CSharpCodeProvider codeProvider = new CSharpCodeProvider(); 
string sFixedName = codeProvider.CreateValidIdentifier("somePossiblyInvalidName"); 
CodeTypeDeclaration codeType = new CodeTypeDeclaration(sFixedName); 

Возвращает правильное имя при заданном входе. Если вы просто хотите проверить имя, а не исправить его, сравните ввод и вывод. Это не изменит действительный ввод, поэтому вывод будет эквивалентным.

2 голосов
/ 18 сентября 2008

Я нашел ответ на свой вопрос. Я могу позвонить

CodeCompiler.ValidateIdentifiers(class1);

где class1 - это объект CodeObject для проверки всех идентификаторов в этом дереве CodeDom и ниже. Поэтому я могу вызвать это сразу после того, как я создаю свой CodeTypeDeclaration class1 для проверки только имени класса, или я могу создать свой CodeDom и затем вызвать его в конце, чтобы проверить все идентификаторы в моем дереве. Как раз то, что мне нужно!

1 голос
/ 18 сентября 2008
public static bool IsReservedKeyWord(string identifier)
        {
            Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
            return csharpProvider.IsValidIdentifier(identifier);
        }
...