Использование свойства в качестве аргумента атрибута - PullRequest
0 голосов
/ 14 сентября 2009

Я написал собственный атрибут проверки кредитной карты, который проверяет, что свойство CardNumber действительно для определенного типа карты (другое свойство в том же классе)

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

Это не скомпилируется, поскольку студия жалуется, что аргументы атрибута должны быть постоянными, выражением typeof или выражением создания массива типа параметра атрибута (?).

Могу ли я в любом случае передать это и передать мой this.CardType атрибуту?

Доброжелательность,

Дан

1 Ответ

5 голосов
/ 14 сентября 2009

К сожалению нет. Даже если IL позволяет значению атрибута быть маркером ссылки на член (например, PropertyInfo эффективно), нет оператора C #, чтобы получить его для вас 1 . Вы можете передать его как строковый литерал, а затем использовать отражение, чтобы получить PropertyInfo. Уродливый и хрупкий, но, вероятно, ближайший к вам.


1 Это широко известный запрос функции, который, возможно, называется оператором infoof. Хотя нет никаких признаков того, что это будет реализовано.

...