C#反射遍历/查询类中的属性以及值

遍历一个类/或类对象的属性/值,很有用,看个例子

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Reflection;  
    using System.Text;  
    using System.Threading.Tasks;  
      
    namespace ConsoleApplication13  
    {  
        class Program  
        {  
            static void Main(string[] args)  
            {  
                //新建一个对象  
                Object o = new {name="zhifeiya",@class="myclass" };  
      
                //如果有name这个属性  
                if(JudgeHasProperty("name",o))  
                {  
                    //输出name的值  
                    Console.WriteLine(GetPropertyValueByName("name",o).ToString());  
                }  
      
                //遍历该ae对象的name/value (这是一个系统类,这里拿来测试一下)  
                ApplicationException ae = new ApplicationException();  
                ForeachPropertyValues(ae);  
                Console.Read();  
            }  
      
      
      
            /// <summary>  
            /// 判断 对象 中是否有该属性(不区分大小写)  
            /// </summary>  
            /// <param name="PropertyName">属性名称</param>  
            /// <param name="o">目标对象</param>  
            /// <returns></returns>  
            public static bool JudgeHasProperty(string PropertyName,Object o)  
            {  
                if (o == null)  
                {  
                    o = new { };  
                }  
                PropertyInfo[] p1 = o.GetType().GetProperties();  
                bool b = false;  
                foreach (PropertyInfo pi in p1)  
                {  
                    if (pi.Name.ToLower() == PropertyName.ToLower())  
                   {  
                       b = true;  
                   }  
                }  
                return b;  
            }  
      
      
            /// <summary>  
            /// 获取指定属性的值(不区分大小写)  
            /// </summary>  
            /// <param name="PropertyName">属性名称</param>  
            /// <param name="o">目标对象</param>  
            /// <returns></returns>  
            public static Object GetPropertyValueByName(string PropertyName, Object o)  
            {  
                if (o == null)  
                {  
                    o = new { };  
                }  
                //创建一个返回对象  
                Object returnObject=new Object();  
                PropertyInfo[] p1 = o.GetType().GetProperties();  
                foreach (PropertyInfo pi in p1)  
                {  
                    if (pi.Name.ToLower() == PropertyName.ToLower())  
                    {  
                        returnObject = pi.GetValue(o);  
                    }  
                }  
                return returnObject;  
            }  
      
      
      
            /// <summary>  
            /// 遍历属性的名称/值(显示形式:name=value)  
            /// </summary>  
            /// <param name="o"></param>  
            public static void ForeachPropertyValues( Object o)  
            {  
                if (o == null)  
                {  
                    o = new { };  
                }  
                PropertyInfo[] p1 = o.GetType().GetProperties();  
                foreach (PropertyInfo pi in p1)  
                {  
                    Console.WriteLine(pi.Name + ":" + pi.GetValue(o,null));  
                }  
              
            }  
      
        }  
      
      
      
    }  

运行结果:


场景案例:比如想对HtmlHelper写一个扩展的生成Button标签的方法:

    public static MvcHtmlString MyButton(this HtmlHelper h, Object HtmlAttribute)  
    {  
        if (HtmlAttribute == null)  
        {  
            HtmlAttribute = new { };  
        }  
        string str = "";  
        PropertyInfo[] p1 = HtmlAttribute.GetType().GetProperties();  
        foreach (PropertyInfo pi in p1)  
        {  
      
            str += "  " + pi.Name + "='" + pi.GetValue(HtmlAttribute, null).ToString() + "'   ";  
      
        }  
      
        return new MvcHtmlString( "<input type='button' " + str + " >");  
      
    }  

使用的时候,在视图中,我们就可以这样直接调用了:

    @Html.MyButton(new { id="but",name="butname",@class="myclass",value="submit"})  

生成的html代码:

    <input type='button'   id='but'     name='butname'     class='myclass'     value='submit'    >  
原文地址:https://www.cnblogs.com/hnsongbiao/p/7606807.html