Question

J'utilise CodeDom pour générer du code dynamique basé sur les valeurs de l'utilisateur. Une de ces valeurs contrôle le nom de la classe que je génère. Je sais que je pourrais stériliser le nom en fonction des règles de langage relatives aux noms de classe valides à l'aide d'expressions régulières, mais j'aimerais savoir s'il existe une méthode spécifique intégrée dans le cadre pour valider et / ou stériliser un nom de classe.

Était-ce utile?

La solution

Un moyen facile de déterminer si une chaîne est un identificateur valide pour une classe ou une variable consiste à appeler la méthode statique

System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentIdentifier(string value)

Autres conseils

Utilisez la méthode CreateValidIdentifier sur la classe CSharpCodeProvider .

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

Il retourne un nom valide avec certaines entrées. Si vous souhaitez simplement valider le nom et ne pas le corriger, comparez l'entrée et la sortie. Cela ne modifiera pas les entrées valides, donc le résultat sera équivalent.

J'ai trouvé une réponse à ma question. Je peux appeler

CodeCompiler.ValidateIdentifiers(class1);

où class1 est un CodeObject pour valider tous les identificateurs dans cette arborescence CodeDom et au-dessous. Je peux donc appeler cela juste après avoir créé ma classe CodeTypeDeclaration1 pour valider uniquement le nom de la classe, ou bien construire mon CodeDom et l'appeler à la fin pour valider tous les identifiants de mon arborescence. Juste ce dont j'avais besoin!

public static bool IsReservedKeyWord(string identifier)
        {
            Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
            return csharpProvider.IsValidIdentifier(identifier);
        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top