2010-05-13 10 views
21

Tenemos un código DB Atribuido bien, así:Uso de variables dentro de Atributos en C#

[Display(Name = "Phone Number")] 
public string Phone { get; set; } 

ya que es bastante genérica que nos gustaría volver a utilizarlo, pero con una cadena diferente en el Nombre parte del atributo. Ya que es un atributo que parece que quiere que las cosas sean const, así que probamos:

const string AddressType = "Student "; 
[Display(Name = AddressType + "Phone Number")] 
public string Phone { get; set; } 

Esto parece funcionar bien, excepto que tiene una cadena const significa que no podemos sobrescribir en cualquier clases de base, eliminando de este modo la funcionalidad que originalmente intentábamos agregar y exponiendo mi pregunta:

¿Hay alguna manera de usar algún tipo de variable dentro de un atributo para que podamos heredar y conservar las decoraciones de los atributos?

Respuesta

19

Todo lo que se encuentra dentro de un atributo debe ser conocido por el compilador en tiempo de compilación. Las variables son inherentemente variables (!) Por lo que no se pueden usar en atributos.

Si puede usar una herramienta de generación de código, podrá inyectar dinámicamente diferentes valores (constantes) en cada clase derivada.

+0

Eso es muy malo, pero pensé que sí. Gracias. – thepaulpage

+0

Eso es muy malo. Sin embargo, debería haber tales casos de uso, ¿hay buenas alternativas? – liang

3

Podría saltar por los aros y usar un atributo adicional para definir la parte variable, pero eso sería bastante trabajo comparado con lo que produciría. No hay una manera simple de lograr lo que estás buscando.

+0

Consideré brevemente mi propio atributo, pero creo que el trabajo adicional no justificaría el trabajo guardado. Es un problema simple en mi parte final, pero no cuando se tiene que compilar. – thepaulpage

Cuestiones relacionadas