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
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)
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!
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.
public static bool IsReservedKeyWord(string identifier)
{
Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
return csharpProvider.IsValidIdentifier(identifier);
}
- 1. ¿Hay una clase estándar para representar un "rango" en .net?
- 2. ¿Hay alguna manera de validar un nombre de archivo?
- 3. Regex para validar un nombre de archivo
- 4. .NET: ¿Hay una clase para copiar propiedades de una clase a otra?
- 5. ¿Hay una función como isdate() para datetime2?
- 6. ¿Hay un nombre para esta función o patrón?
- 7. Práctica recomendada para devolver información adicional de una función Validar
- 8. Validar un nombre de archivo en python
- 9. ¿Hay alguna manera de recuperar un nombre de función de PowerShell dentro de una función?
- 10. ¿Hay una función del sistema operativo para traducir un REFIID a un nombre útil?
- 11. Usando .NET para validar XML contra un esquema
- 12. ¿Hay un tipo .NET nativo para las subredes CIDR?
- 13. ¿Hay alguna manera de obtener el nombre de la función dentro de una función de C++?
- 14. ¿Hay un validador de URL en .Net?
- 15. ¿Hay una clase de pila de doble cara en .net?
- 16. ¿Qué hace un buen nombre para una función de ayuda?
- 17. ¿Hay una clase .NET que represente tipos de operador?
- 18. Validar IPv4, IPv6 y nombre de host
- 19. nombre de un paquete para una función dada en I
- 20. ¿Hay un nombre "canónico" para una función que combine min() y max()?
- 21. un nombre de propiedad en .NET
- 22. C++ - Llamar a una función dentro de una clase con el mismo nombre que la clase
- 23. PHP pasando un nombre de clase se convierte en una cadena cuando pasa a una función
- 24. ¿Una función virtual anula una función no virtual del mismo nombre en una clase base?
- 25. ¿Hay un nombre para este algoritmo?
- 26. ¿Hay un Base64Stream para .NET? ¿dónde?
- 27. ¿Hay un IDE * muy * liviano para .net?
- 28. ¿hay un perfilador CLR para .NET 4.0?
- 29. ¿Hay un contenedor .NET/C# para SQLite?
- 30. ¿Hay una API para Cruise Control .NET?
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