2008-09-18 7 views
21

Estoy usando CodeDom para generar código dinámico en función de los valores del usuario. Uno de esos valores controla el nombre de la clase que estoy generando. Sé que podría esterilizar el nombre en base a las reglas de lenguaje sobre los nombres de clase válidos usando expresiones regulares, pero me gustaría saber si hay un método específico incorporado en el marco para validar y/o esterilizar un nombre de clase.¿Hay una función .NET para validar un nombre de clase?

Respuesta

25

Una manera fácil de determinar si una cadena es un identificador válido para una clase o variable es llamar al método estático

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

Encontré una respuesta a mi pregunta. Puedo llamar

CodeCompiler.ValidateIdentifiers(class1); 

donde class1 es un CodeObject para validar todos los identificadores en ese árbol CodeDom y por debajo. Así que puedo llamar esto justo después de crear mi clase CodeTypeDeclaration1 para validar solo el nombre de la clase, o puedo construir mi CodeDom y luego llamar esto al final para validar todos los identificadores en mi árbol. ¡Justo lo que necesitaba!

7

Utilice el método CreateValidIdentifier en la clase CSharpCodeProvider.

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

Devuelve un nombre válido con alguna entrada. Si solo quiere validar el nombre y no corregirlo, compare la entrada y la salida. No alterará la entrada válida, por lo que la salida será equivalente.

+4

Todo esto hace es cambiar el nombre de un identificador si entra en conflicto con una reservada palabra. No crea un identificador válido si el valor pasado tiene caracteres inválidos. Esto es útil, pero no todo lo que debe suceder antes de poder crear el nuevo tipo de código. – Zach

1
public static bool IsReservedKeyWord(string identifier) 
     { 
      Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider(); 
      return csharpProvider.IsValidIdentifier(identifier); 
     } 
Cuestiones relacionadas