我有以下代码,我正在尝试将自定义属性应用于声明的类中的字段。我在下面的错误中反对声明中的'FileType'和'AllowNulls'字样(如下所示)
错误3'FieldType'不是有效的命名属性参数。命名属性参数必须是非readonly,static或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('"', QuoteMode.OptionalForRead, MultilineMode.AllowForRead)]
public String ERNum;
}
谢谢!
答案 0 :(得分:3)
您的属性是只读的,属性的命名参数必须是可读/写的,因此您必须向属性添加set
方法。
如果要使用只读属性,则应使用属性的构造函数参数而不是命名参数。
这意味着你可以使用这个:
[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; }
}
注意:我在后一个示例中使用了自动属性,但不使用前者,因为我更喜欢在属性中将字段设置为readonly(除了构造函数之外,readonly字段不能修改)。我也将AllowNulls改为bool,因为我认为没有理由将它作为字符串。