2015-02-19 4 views
0

Я пытался написать следующий код -Почему атрибут проверки принимающий параметр конструктора не принимает переменные

[Range(DateTime.UtcNow.Add(-7).Ticks, DateTime.UtcNow.Add(7).Ticks)] 
public DateTime TimeStamp; 

Компилятор сообщил об ошибке - Аргумент атрибут должен быть константным выражением, TypeOf выражение или массив создание выражение типа параметра атрибута.

Ошибка описана самостоятельно, все в порядке. Мой вопрос: в чем смысл не допускать вызовы выражений/переменных/методов в качестве аргумента для любого атрибута в C#?

+1

Возможно, способ разъяснить ваш вопрос: это ни в коем случае не относится к атрибутам * Validation *, это ограничение любых атрибутов. –

+0

@ O.R.Mapper, спасибо за разъяснение. Я наблюдал это с ValidationAttribute, таким образом, вопрос. Но я отредактирую вопрос, чтобы задать Атрибут в C#. –

ответ

2

Поскольку атрибуты хранятся как метаданные, их значения должны быть известны во время компиляции, чтобы их можно было сохранить после компиляции кода и не изменять во время выполнения.

Смежные вопросы