如果一个类型可以转换为其他类型,我想为验证控件创建一个自定义属性吗?
[AttributeUsage(AttributeTargets.Property)]
public class TypeParsableAttribute : ValidationAttribute
{
private readonly string _displayName;
private readonly Type _type;
public TypeParsableAttribute(Type type, string displayName = "")
{
_displayName = displayName;
_type = type;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var name = !string.IsNullOrEmpty(_displayName) ? _displayName : validationContext.DisplayName;
bool isParsable = // how to chech parsable object to _type ???
return !isParsable
? new ValidationResult(FormatErrorMessage(name))
: ValidationResult.Success;
}
}
我想把它用于任何财产。验证
public class Myclass
{
[TypeParsable(typeof(int))]
public string Name {get; set;}
[TypeParsable(typeof(Datetime))]
public string BirthDate {get; set;}
[TypeParsable(typeof(int))]
public float Salary {get; set;}
}
我想获得这类属性的验证结果,但我无法生成用于检查是否可转换的代码。
您可以使用Convert.ChangeType((,检查样本代码
string x="10x";
Type tt = 30.GetType();
bool canConvert = false;
try{
object obj= Convert.ChangeType(x,tt);
canConvert = true;
}
catch(Exception ex){
canConvert = false;
}
Console.WriteLine(canConvert);
下面的一些参考链接
链路1
MSDN
使用TypeDescriptor
。请在此处阅读详细信息。
bool isParsable = TypeDescriptor.GetConverter(_type).IsValid(value);
GetConverter
获取指定类型的内置转换器,IsValid
验证给定值对象是否对此类型有效。此处检查IsValid