使用属性作为属性参数

时间:2009-09-14 13:25:51

标签: c# attributes data-annotations

我编写了一个自定义信用卡验证属性,用于检查CardNumber属性是否对特定卡类型(同一类中的另一个属性)有效

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

这不会编译,因为工作室抱怨属性参数必须是常量,类型表达式或属性参数类型(?)的数组创建表达式。

无论如何我可以传递cirvumvent并将this.CardType传递给属性吗?

善,

1 个答案:

答案 0 :(得分:5)

不幸的是没有。即使IL允许属性值成为成员引用标记(例如,有效地为PropertyInfo),也没有C#运算符为您提供一个 1 。您可以将其作为字符串文字传递,然后使用反射来获取PropertyInfo。丑陋而脆弱,但可能是你最接近的。


1 这是一个众所周知的功能请求,可能称为“infoof”运算符。但是没有迹象表明它正在实施。