【发布时间】:2011-06-13 01:35:00
【问题描述】:
我有一个带有自定义属性的字段,如下所示:
[DBDataTypeAttribute(FieldType = "varchar(1000)",AllowNulls=false)]
public String ERLineID;
我有一些寻找这个的代码,像这样:
foreach (FieldInfo field in userType.GetFields())
{
currentDefaultDataType = createtabledefaultdatatype;
currentDefaultAllowNulls = createtabledefaultallownulls;
DBDataTypeAttribute attribute =
(DBDataTypeAttribute)Attribute.GetCustomAttribute(field, typeof(DBDataTypeAttribute));
if (attribute != null)
{
// at least one of createtabledefaultdatatype or createtabledefaultallownulls exists
if (attribute.FieldType != null)
{
currentDefaultDataType = attribute.FieldType;
}
if (attribute.AllowNulls != null)
{
currentDefaultAllowNulls = attribute.AllowNulls;
}
...
值 createtabledefaultallownulls 来自配置文件并设置为 true。但是我发现,当我在属性中去掉“allownulls”时,它会用 false 值覆盖我的“true”默认值。
如果我在属性中仅指定 FieldType,我会期望 'if (attribute.AllowNulls != null)' 评估为 false。相反,它说该值不为空,并说 attribute.AllowNulls 为假。因此,即使未指定任何值,它也会覆盖我的默认值。这与布尔不可为空有关吗?或者,如果您添加一个属性,您必须明确定义其中的所有参数?
我正在考虑的解决方法只是将其设为字符串并对其进行 bool.parsing,但这听起来不太优雅!有没有更好的办法?
【问题讨论】:
标签: c# custom-attributes