我有以下属性,我将类型传递给构造函数:
[DataTypeConversion(typeof(StringToBoolConverter), typeof(BoolToYesNoConverter))]
但是,我真的想抛弃构造函数并通过这样的初始化程序强制对象设置:
[DataTypeConversion{InConverterType = typeof(StringToBoolConverter), OutConverterType = typeof(BoolToYesNoConverter)}]
但是,我似乎无法做到这一点。是否有另一种方式或者根本不支持属性?
修改:为什么我要这样做?它不仅可以提高可读性,还可以强制开发人员指定属性。虽然属性支持命名构造函数参数,但它们是可选的。
Edit2:我可以实例化一个这样的属性:
var attr = new DataTypeConversionAttribute
{
InConverterType = typeof(StringToBoolConverter),
OutConverterType = typeof(BoolToYesNoConverter)
};
我希望能够在装饰属性时以相同的方式实例化它。
更新
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 :(得分:1)
将其更改为:
[DataTypeConversion(InConverter = typeof(StringToBoolConverter), OutConverter = typeof(BoolToYesNoConverter))]
(括号而不是大括号)
我认为DataTypeConversionAttribute
有一个默认构造函数和两个带有公共setter的公共属性:InConverter
和OutConverter
,返回类型为System.Type
答案 1 :(得分:0)
C#-Compiler不支持使用此样式声明类型的属性。在MSDN上获取a look如何使用属性。