Domanda

Sto utilizzando CodeDom per generare codice dinamico basato sui valori dell'utente.Uno di questi valori controlla qual è il nome della classe che sto generando.So che potrei sterilizzare il nome in base alle regole linguistiche sui nomi di classe validi utilizzando espressioni regolari, ma mi piacerebbe sapere se esiste un metodo specifico integrato nel framework per convalidare e/o sterilizzare il nome di una classe.

È stato utile?

Soluzione

Un modo semplice per determinare se una stringa è un identificatore valido per una classe o una variabile è chiamare il metodo statico

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

Altri suggerimenti

Usa il CreateValidIdentifier metodo sul CSharpCodeProvider classe.

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

Restituisce un nome valido dato un input.Se vuoi solo convalidare il nome e non correggerlo, confronta l'input e l'output.Non modificherà l'input valido, quindi l'output sarà equivalente.

Ho trovato una risposta alla mia domanda.Posso chiamare

CodeCompiler.ValidateIdentifiers(class1);

dove class1 è un CodeObject per convalidare tutti gli identificatori nell'albero CodeDom e sotto.Quindi posso chiamarlo subito dopo aver creato la mia CodeTypeDeclaration class1 per convalidare solo il nome della classe, oppure posso creare il mio CodeDom e quindi chiamarlo alla fine per convalidare tutti gli identificatori nel mio albero.Proprio quello di cui avevo bisogno!

public static bool IsReservedKeyWord(string identifier)
        {
            Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
            return csharpProvider.IsValidIdentifier(identifier);
        }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top