Fout met DefaultValueAttribute

Ik probeer de waarde DefaultValueAttribute dynamisch te maken, en dit is hoe ik dit probeer te bereiken

DefaultValueAttribute(string.Format("Copyright @ 2009 - {0} {1}", DateTime.Now.Year.ToString(), "Gods Creation Taxidermy"))] 

Als ik dit doe, krijg ik de volgende foutmelding:

Een attribuutargument moet een constante uitdrukking, typeof uitdrukking zijn   of arraycreatie-expressie van een attribuut parametertype

Is wat ik probeer te doen gewoon niet mogelijk of ga ik er verkeerd over? Alle suggesties of ideeën?

EDIT: Here's the entire property:

[CategoryAttribute("Text Settings"),
DescriptionAttribute("Copyright Text..."),
DefaultValueAttribute(string.Format("Copyright @ 2009 - {0} {1}", DateTime.Now.Year.ToString(), "Gods Creation Taxidermy"))]        
public string CopyrightText { get; set; }
1
Ik probeer het te laten zeggen "Copyright @ 2009 -" het huidige jaar op het watermerk
toegevoegd de auteur PsychoCoder, de bron
Waar probeer je de standaardwaarde van in te stellen?
toegevoegd de auteur SLaks, de bron

2 antwoord

Meestal wordt dit voorkomen door de manier waarop attributen worden gebruikt. Alleen een zuivere letterlijke constante waarde, die kan worden begrepen vóór compileren komt echt van start, kan worden gebruikt in een declaratieve attribuutconstructor. In principe alleen pure getallen, strings, types of enums, zonder manipulatie.

De uitzondering hierop is wanneer de module die naar de kenmerken kijkt compatibel is met ICustomTypeDescriptor .

Een type dat ICustomTypeDescriptor implementeert, kan het GetAttributes methode om een ​​set kenmerken terug te sturen die volledig tijdens runtime zijn gemaakt. Dit betekent dat niet alleen de staat maar ook de aanwezigheid van een attribuut tijdens runtime kan worden gecontroleerd door de status van uw object.

A reminder though: the limitation of this is approach is that not everything that is attribute-driven looks for this interface. In fact, many don't. But it may be worth looking into. One example of a module that does make use of ICustomTypeDescriptor is the PropertyGrid control. The use of these together is described here: http://www.codeproject.com/KB/miscctrl/bending_property.aspx

1
toegevoegd
Het zou leuk zijn als dit zou werken, zeker van pas komen, maar bedankt voor de tijd die je hierin hebt gestopt.
toegevoegd de auteur PsychoCoder, de bron

Dit is niet mogelijk.

Zoals de fout duidelijk aangeeft, moeten attribuutparameters compileertijd -constanten zijn.

0
toegevoegd