Ich verwende CodeDom, um dynamischen Code basierend auf Benutzerwerten zu generieren. Einer dieser Werte steuert, was der Name der Klasse ist, die ich erzeuge. Ich weiß, ich könnte den Namen auf Sprachregeln über gültige Klassennamen mit regulären Ausdrücken basierte sterilisieren, aber ich würde gerne wissen, ob es eine bestimmte Methode in den Rahmen eingebaut ist zu validieren und/oder einen Klassennamen zu sterilisieren.Gibt es eine .NET-Funktion, um einen Klassennamen zu validieren?
Antwort
Ein einfacher Weg, um zu bestimmen, ob ein String ein gültiger Bezeichner für eine Klasse oder Variable ist die statische Methode
System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentIdentifier(string value)
Ich habe eine Antwort auf meine Frage gefunden. Ich kann anrufen
wo Klasse1 ist ein CodeObject, um alle Bezeichner in dieser CodeDom-Struktur und darunter zu überprüfen. 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!
Verwenden Sie die CreateValidIdentifier
Methode auf der CSharpCodeProvider
Klasse.
Bei einigen Eingaben wird ein gültiger Name zurückgegeben. Wenn Sie nur den Namen validieren und nicht korrigieren möchten, vergleichen Sie die Eingabe und Ausgabe. Es wird keine gültige Eingabe ändern, so dass die Ausgabe äquivalent ist.
public static bool IsReservedKeyWord(string identifier)
{
Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
return csharpProvider.IsValidIdentifier(identifier);
}
Alle nennen dies eine Kennung umbenannt wird, wenn es mit einem reservierten Konflikt Wort. Es wird keine gültige ID erstellt, wenn der übergebene Wert ungültige Zeichen enthält. Dies ist hilfreich, aber nicht alles, was passieren muss, bevor Sie den neuen Codetyp erstellen können. – Zach