2015-10-14 5 views
0

У меня есть следующий атрибут, в котором я прохожу типы конструктору:Инициализатор объектов для атрибутов?

[DataTypeConversion(typeof(StringToBoolConverter), typeof(BoolToYesNoConverter))] 

Однако, я бы очень хотел, чтобы угробить конструктор и заставить установку объекта через инициализаторе так:

[DataTypeConversion{InConverterType = typeof(StringToBoolConverter), OutConverterType = typeof(BoolToYesNoConverter)}] 

Не похоже, что я могу это сделать. Есть ли другой способ или просто не поддерживается атрибутами?

Редактировать: Зачем мне это нужно? Это не просто улучшает читаемость, но и заставляет разработчика указывать свойство. Хотя атрибуты поддерживают аргументы конструктора, они необязательны.

Edit2: Я могу создать экземпляр атрибута, как это:

var attr = new DataTypeConversionAttribute 
{ 
    InConverterType = typeof(StringToBoolConverter), 
    OutConverterType = typeof(BoolToYesNoConverter) 
}; 

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

Update

astef при условии правильного ответа. Вот мой атрибут:

[AttributeUsage(AttributeTargets.Property)] 
public class DataTypeConversionAttribute : Attribute 
{ 
    public Type InConverterType { get; set; } 

    public Type OutConverterType { get; set; } 
} 

Хотя {} используются для инициализаторов объектов в стандартном коде, вам нужно использовать () для атрибутов, как так:

public class MyClass 
{ 
    [DataTypeConversion(InConverterType = typeof(StringToBoolConverter), OutConverterType = typeof(BoolToYesNoConverter))] 
    public bool MyBool { get; set; } 
} 
+0

добавить чтение-запись-свойства в файл 'DataTypeConversionAttribute' и использовать его как' [DataTypeConversion (InConverter = TypeOf (StringToBoolConverter), OutConverter = TYPEOF (BoolToYesNoConverter))] ' – Jehof

+0

CTOR аргументы (позиционные аргументы) не являются необязательными, свойства (именованные аргументы) являются необязательными. Оба они установлены внутри скобок: '[DataTypeConversion (ctorPosArg1, ctorPosArg2, PropertyA = arg3, PropertyB = arg4)]' – astef

+0

@astef Правильно, сами аргументы требуются. Я говорил, что именованные аргументы являются необязательными. Кроме того, они не находятся в скобках, но в скобках. Кудрявые скобки - это то, что используется для инициализаторов объектов, чего я пытаюсь достичь. – oscilatingcretin

ответ

1

Изменить это:

[DataTypeConversion(InConverter = typeof(StringToBoolConverter), OutConverter = typeof(BoolToYesNoConverter))] 

(скобки вместо брекетов)

Я предполагаю, что DataTypeConversionAttribute имеет конструктор по умолчанию и два открытых свойства с общественными сеттеров: InConverter и OutConverter с возвращаемым типом System.Type

+0

Я удалил свой комментарий, потому что ваш ответ * - это правильный способ сделать это. Я искал фигурные скобки, но кажется, что они не поддерживаются атрибутами. – oscilatingcretin

0

Это не поддерживается в C# -Compiler для объявления атрибутов типов, используя этот стиль. Возьмите a look в MSDN, как использовать атрибуты.

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