属性的对象初始值设定项?

时间:2015-10-14 11:47:50

标签: .net attributes

我有以下属性,我将类型传递给构造函数:

[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; }
}

2 个答案:

答案 0 :(得分:1)

将其更改为:

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

(括号而不是大括号)

我认为DataTypeConversionAttribute有一个默认构造函数和两个带有公共setter的公共属性:InConverterOutConverter,返回类型为System.Type

答案 1 :(得分:0)

C#-Compiler不支持使用此样式声明类型的属性。在MSDN上获取a look如何使用属性。