在Attribute类上使用泛型类型

时间:2018-03-06 12:14:20

标签: c# generics types enums attributes

我正在忙于构建一个Enum类来验证正在导入的文件。我创建了一个自定义属性类,它将采用指定的标准。我面临的问题是数据类型转换必须与die属性中指定的数据类型一起发生。我想让它尽可能通用。

这就是我所拥有的:

ENUM

[Description("Company ID")]
[ColumnValidation(typeof(int), true, -1)]
CompanyID,

[Description("Company Name")]
[ColumnValidation(typeof(string), true, 50)]
CompanyName,

[Description("Company Status")]
[ColumnValidation(typeof(string), true, 50)]
CompanyStatus,

我有扩展方法来获取每个属性值,我遇到的问题是:

public static T ToDataType<T>(this WoWFileStructure val, object valueToConvert)
{
     try
     {
         return (T)Convert.ChangeType(valueToConvert, val.GetDataType());
     }
     // Catch format exception when unabe to cast value to required datatype and cast object to its default value
     catch (FormatException)
     {
         var instance = Activator.CreateInstance(typeof(T));
         return (T)instance;
     }
}

此方法获取Type:

public static Type GetDataType(this WoWFileStructure val)
{
    return val.GetAttribute<ColumnValidationAttribute>().GetPropertyType();
}

这就是我所说的:

var type = enum.CompanyID.GetDataType();
var value = enum.CompanyID.ToDataType<type>("test");

然后我得到错误说:

  

'type'不能像类型

那样使用

修改 属性类

[AttributeUsage(AttributeTargets.Field)]
public class ColumnValidationAttribute : Attribute, IExtendedEnumAttribute
{
    private Type propertyType;
    private bool isRequired;
    private int stringLength;

    public ColumnValidationAttribute(Type propertyType, bool isRequired, int stringLength)
    {
        this.propertyType = propertyType;
        this.isRequired = isRequired;
        this.stringLength = (int)stringLength;
    }

    public Type GetPropertyType()
    {
        return propertyType;
    }

    public bool IsRequired()
    {
        return isRequired;
    }

    public int GetStringLength()
    {
        return stringLength;
    }
}

0 个答案:

没有答案