32

We have some Well-Attributed DB code, like so:

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

Since it is quite generic we'd like to use it again, but with a different string in the Name part of the attribute. Since it's an attribute it seems to want things to be const, so we tried:

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

This seems to work alright, except that having a const string means we can't overwrite it in any base classes, thereby removing the functionality that we originally were intending to add, and exposing my question:

Is there a way to use some sort of variable inside of an attribute so that we can inherit and keep the attribute decorations?

thepaulpage
  • 4,614
  • 2
  • 25
  • 39

2 Answers2

31

Everything inside an attribute must be known to the compiler at compile-time. Variables are inherently variable (!) so can't be used in attributes.

If you can use a code generation tool, you'd be able to dynamically inject different (constant) values into each derived class.

Daniel Renshaw
  • 33,729
  • 8
  • 75
  • 94
4

You could jump through hoops and use an additional attribute to define the variable portion, but that would be quite a bit of work compared to what it would produce. There's no simple way to accomplish what you're after.

Adam Robinson
  • 182,639
  • 35
  • 285
  • 343
  • I briefly considered my own attribute, but I think the extra work would not justify the saved work. It's a simple problem on my end of things, but not when it has to be compiled. – thepaulpage May 13 '10 at 15:10