如何使用属性信息获取列表类型属性的值

本文关键字:属性 类型 列表 获取 何使用 信息 | 更新日期: 2023-09-27 18:36:13

            private static void Getproperties(Object Model) {
            Type objType = Model.GetType();
            PropertyInfo[] properties = objType.GetProperties();
            foreach (PropertyInfo property in properties)
            {
                object propValue;
                //Checking if property is indexed                 
                if(property.GetIndexParameters().Length ==0)
               propValue  = property.GetValue(Model,null);
                else
                {  
                 // want to retrieve collection stored in property index not passing 0 index returning element at 0 location ,how can i get whole list  
                 propValue = property.GetValue(objectModel,new Object[]{0});                       
                 }
                var elems = propValue as IList;
                 .... }

如何获取列表类型的属性值,我在模型中的属性是列表类型,例如我的模型包含一个列表属性

List<User>

想要创建一个过滤器并添加到我可以检查潜在 Xss 攻击的操作中,模型是否包含任何此类攻击

如何使用属性信息获取列表类型属性的值

你真的不需要第二个参数的重载。您真正需要的是将该方法返回object转换回.GetValue()类型List<T>。例:

class MyClass
{
    public List<int> MyProperty { get { return new List<int>() { 3, 4, 5, 6 }; } }
}
class Program
{        
    static void Main()
    {
        MyClass instance = new MyClass();
        PropertyInfo info = instance.GetType().GetProperty("MyProperty");
        List<int> another = info.GetValue(instance) as List<int>;
        for (int i = 0; i < another.Count; i++)
        {
            Console.Write(another[i] + "   ");
        }
    }
}

输出 : 3 4 5 6

检查这个。

      List<string> sbColors = new List<string>();
      Type colorType = typeof(System.Drawing.Color);
      PropertyInfo[] propInfoList = colorType.GetProperties(BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.Public);
      foreach (PropertyInfo c in propInfoList)
      {
         sbColors.Add(c.Name);
      }