Frage

Ich bin mit CodeDom dynamischen Code zu generieren, basierend auf Benutzerwerte. Einer dieser Werte steuert, was der Name der Klasse ist, ich bin zu erzeugen. Ich weiß, dass ich den Namen mit regulären Ausdrücken auf Basis von Sprachregeln über gültige Klassennamen sterilisieren konnte, aber ich würde gerne wissen, ob es eine bestimmte Methode in den Rahmen eingebaut ist zu validieren und / oder einen Klassennamen sterilisieren.

War es hilfreich?

Lösung

Ein einfacher Weg, um zu bestimmen, ob ein String ein gültiger Bezeichner für eine Klasse oder Variable ist die statische Methode aufrufen

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

Andere Tipps

Mit der CreateValidIdentifier Methode auf der CSharpCodeProvider Klasse.

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

Es gibt einen gültigen Namen einig Eingabe gegeben. Wenn Sie nur den Namen überprüfen möchten und nicht reparieren, zu vergleichen, die Ein- und Ausgabe. Es wird nicht gültige Eingabe ändern, so dass die Ausgabe gleichwertig sein wird.

fand ich eine Antwort auf meine Frage. Ich kann anrufen

CodeCompiler.ValidateIdentifiers(class1);

wo class1 ist ein CodeObject alle Bezeichner in diesem CodeDom Baum zu validieren und unten. So kann ich dieses Recht nennen, nachdem ich meine CodeTypeDeclaration class1 schaffen nur den Klassennamen zu bestätigen, oder kann ich meine CodeDom aufbauen und diese dann am Ende rufen alle Kennungen in meinem Baum zu validieren. Genau das, was ich brauchte!

public static bool IsReservedKeyWord(string identifier)
        {
            Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
            return csharpProvider.IsValidIdentifier(identifier);
        }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top