如何在c#中创建类型可转换的验证属性



如果一个类型可以转换为其他类型,我想为验证控件创建一个自定义属性吗?

[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

最新更新