C# 中通过反射获取属性值

我需要通过反射获取 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

现在有什么问题吗?我怎么解决这个问题 ?


万千封印
浏览 119回答 1
1回答

一只甜甜圈

应该做什么item.GetType().GetProperty(item.Name)?item是一个PropertyInfo实例。您并不是想要获得它的属性,而是想要获得您的model.因此,将您的代码简化为:var value = item.GetValue(model) as string;if (value?.Length > max){&nbsp; &nbsp; return validate = true;}
打开App,查看更多内容
随时随地看视频慕课网APP