c#问题是在自定义属性类中声明参数

问题描述

| 我使用以下代码,尝试将自定义属性应用于声明的类中的字段。我在声明中出现以下针对\\ FileType \和\'AllowNulls \'的错误(如下所示) 错误3 \'FieldType \'不是有效的命名属性参数。命名属性参数必须是非只读,静态或const字段,或者是公共且非静态的读写属性。 F:\\ DropBox \\ Dev_LN Projects \\ 02 Scrap \\ TestFieldAttributes \\ TestFieldAttributes \\ Program.cs 61 34 TestFieldAttributes 我已经尝试了各种删除静态,只读等内容的组合,但是没有运气。有什么想法吗?谢谢
[AttributeUsage(AttributeTargets.Field)]
public class DBDataTypeAttribute : System.Attribute
{
    private string fieldtype;
    public string FieldType
    {
        get { return fieldtype; }
    }

    private string allownulls;
    public string AllowNulls
    {
        get { return allownulls; }
    }

}

public class ExpenseReport
    {
        [FieldQuoted(\'\"\',QuoteMode.OptionalForRead,MultilineMode.AllowForRead)]
        [DBDataTypeAttribute(FieldType = \"varchar(1000)\",AllowNulls = \"true\")]// errors on this line
        public String UniqueID;
        [FieldQuoted(\'\"\',MultilineMode.AllowForRead)]
        public String ERNum;
    }
谢谢!     

解决方法

        您的属性是只读的,并且属性的命名参数必须是可读写的,因此您必须在属性中添加“ 1”方法。 如果要使用只读属性,则应对属性使用构造函数参数,而不要使用命名参数。 这意味着您可以使用以下任一方法:
[AttributeUsage(AttributeTargets.Field)]
public class DBDataTypeAttribute : System.Attribute
{
    private readonly string _fieldType;
    private readonly bool _allowNulls;

    public DBDataTypeAttribute(string fieldType,bool allowNulls)
    {
        _fieldType = fieldType;
        _allowNulls = allowNulls;
    }

    public string FieldType 
    {
        get { return _fieldType; } 
    } 

    public bool AllowNulls
    { 
        get { return _allowNulls; }
    } 
}
或这个:
[AttributeUsage(AttributeTargets.Field)]
public class DBDataTypeAttribute : System.Attribute
{
    public string FieldType { get; set; }
    public bool AllowNulls { get; set; }
}
注意:对于后一个示例,我使用了自动属性,但对于前一个示例,我没有使用自动属性,因为我更喜欢在属性中使字段也变为只读(只读字段只能在构造函数中进行修改)。我也将AllowNulls更改为bool,因为我认为没有理由将其作为字符串。