Насколько я знаю, не существует способа принудительной проверки конкретного типа для отдельного свойства атрибута. Однако, и позвольте мне отметить, что это не самое элегантное решение, вы можете использовать полиморфизм в ваших интересах:
[AttributeUsage(AttributeTargets.Property)]
public class ColumnBindAttribute: Attribute
{
public string ColumnName { get; set; }
public object DefaultUntypedValue
{
get;
protected set;
}
}
[AttributeUsage(AttributeTargets.Property)]
public class ColumnBindGenericAttribute<T> : ColumnBindAttribute
{
public T DefaultValue
{
get { return (T)DefaultUntypedValue; }
set { DefaultUntypedValue = value; }
}
}
[AttributeUsage(AttributeTargets.Property)]
public class ColumnBindInt32Attribute: ColumnBindGenericAttribute<int> {}
[ColumnBindInt32(ColumnName = "Category", DefaultValue = 100)]
public int CategoryId { get; set; }
При извлечении атрибута поиск ищет как конкретный тип, так и базовые типы атрибута, фактически примененного к члену. Вы можете получить все атрибуты ColumBindAttributes, украшающие элемент, даже если они являются производными атрибутами.
РЕДАКТИРОВАТЬ:
Извиняюсь. Код не будет компилироваться, если какой-либо универсальный тип, прямо или косвенно, получен из типа Attribute. Это делает класс ColumnBindGenericAttribute
невозможным. Я думал, что нашел дыру в компиляторе ... оказывается, умнее меня. : P