У меня есть следующий атрибут, в котором я прохожу типы конструктору:Инициализатор объектов для атрибутов?
[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; }
}
добавить чтение-запись-свойства в файл 'DataTypeConversionAttribute' и использовать его как' [DataTypeConversion (InConverter = TypeOf (StringToBoolConverter), OutConverter = TYPEOF (BoolToYesNoConverter))] ' – Jehof
CTOR аргументы (позиционные аргументы) не являются необязательными, свойства (именованные аргументы) являются необязательными. Оба они установлены внутри скобок: '[DataTypeConversion (ctorPosArg1, ctorPosArg2, PropertyA = arg3, PropertyB = arg4)]' – astef
@astef Правильно, сами аргументы требуются. Я говорил, что именованные аргументы являются необязательными. Кроме того, они не находятся в скобках, но в скобках. Кудрявые скобки - это то, что используется для инициализаторов объектов, чего я пытаюсь достичь. – oscilatingcretin