我正在忙于构建一个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;
}
}