2009-09-14 13 views
0

je l'ai écrit un attribut de validation de carte de crédit personnalisée qui vérifie la propriété CardNumber est valide pour un type de carte particulière (une autre propriété dans la même classe)En utilisant une propriété comme argument d'attribut

[CardValidationBinCheck(this.CardType, 
         ErrorMessage = "CreditCardNumberDoesNotMatchCardType")] 
public string CardNumber 
{ 
... 
} 

Ce ne sera pas compilé comme le studio se plaint que les arguments d'attributs doivent être constants, une expression de typeof ou une expression de création de tableau d'un type de paramètre d'attribut (?).

Y at-il de toute façon que je peux passer cirvumvent ceci et passer mon this.CardType à l'attribut?

Bonté,

Dan

+0

Vous devriez convoluer AOP pour le faire, mais pourquoi faites-vous cela? Celui que vous pouvez déterminer le CardType du numéro de carte de crédit. Deux, pourquoi ne pas simplement avoir une méthode et le placer dans l'ensemble de votre propriété à vérifier. –

Répondre

5

Malheureusement non. Même si IL autorise une valeur d'attribut à être un jeton de référence de membre (par exemple un PropertyInfo), il n'y a pas d'opérateur C# pour en obtenir un pour vous . Vous pouvez le transmettre en tant que chaîne littérale et ensuite utiliser la réflexion pour obtenir le PropertyInfo cependant. Laide et fragile, mais probablement la plus proche.


C'est une demande de fonctionnalité bien connue, peut-être appelé l'opérateur "infoof". Il n'y a aucun signe de mise en œuvre cependant.

+0

Merci pour la réponse, Jon. –

Questions connexes