Existe uma função .NET para validar um nome de classe?
-
01-07-2019 - |
Pergunta
Eu estou usando CodeDom para gerar código dinâmico com base em valores do usuário. Um desses valores controles que o nome da classe que eu estou gerando é. Eu sei que poderia esterilizar o nome baseado em regras de linguagem sobre nomes de classe válido usando expressões regulares, mas eu gostaria de saber se existe um método específico embutido no quadro para validar e / ou esterilizar um nome de classe.
Solução
Uma maneira fácil de determinar se uma string é um identificador válido para uma classe ou variável é chamar o método estático
System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentIdentifier(string value)
Outras dicas
Use o método CreateValidIdentifier
na classe CSharpCodeProvider
.
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
string sFixedName = codeProvider.CreateValidIdentifier("somePossiblyInvalidName");
CodeTypeDeclaration codeType = new CodeTypeDeclaration(sFixedName);
Ele retorna um nome válido dada alguma entrada. Se você quiser apenas para validar o nome e não corrigi-lo, comparar a entrada e saída. Ele não irá alterar a entrada válida para que a saída será equivalente.
Eu encontrei uma resposta à minha pergunta. Eu posso chamar
CodeCompiler.ValidateIdentifiers(class1);
onde class1 é um CodeObject para validar todos os identificadores em que a árvore CodeDom e abaixo. Então eu posso chamar isso logo depois que eu criar o meu CodeTypeDeclaration class1 para validar apenas o nome da classe, ou eu posso construir a minha CodeDom e depois chamar isso no final para validar todos os identificadores na minha árvore. Apenas o que eu precisava!
public static bool IsReservedKeyWord(string identifier)
{
Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
return csharpProvider.IsValidIdentifier(identifier);
}