我需要通过反射获取 C# 中的属性值。我需要找到字符串的长度并与 max 进行比较。我写这段代码:public static bool ValidateWithReflection(T model) { bool validate = false; var cls = typeof(T); PropertyInfo[] propertyInfos = cls.GetProperties(); foreach (PropertyInfo item in propertyInfos) { var max = item.GetCustomAttributes<MaxLenghtName>().Select(x => x.Max).FirstOrDefault(); if (max != 0) { var lenght = item.GetType().GetProperty(item.Name).GetValue(cls, null); if ((int)lenght > max) { return validate = true; } } } return validate; }这是为了获取财产的价值:var lenght = item.GetType().GetProperty(item.Name).GetValue(cls, null);但它告诉我这个错误: Message "Object does not match target type." string现在有什么问题吗?我怎么解决这个问题 ?
1 回答
一只甜甜圈
TA贡献1836条经验 获得超5个赞
应该做什么item.GetType().GetProperty(item.Name)?item是一个PropertyInfo实例。您并不是想要获得它的属性,而是想要获得您的model.
因此,将您的代码简化为:
var value = item.GetValue(model) as string;
if (value?.Length > max)
{
return validate = true;
}
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报
0/150
提交
取消