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.

Foi útil?

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);
        }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top