问题描述
|
我使用以下代码,尝试将自定义属性应用于声明的类中的字段。我在声明中出现以下针对\\ 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,因为我认为没有理由将其作为字符串。