1. 程式人生 > >C#反射遍歷/查詢類中的屬性以及值

C#反射遍歷/查詢類中的屬性以及值

    CSDN廣告是越來越多了,所有部落格筆記不再更新,新網址 DotNet筆記

遍歷一個類/或類物件的屬性/值,很有用,看個例子

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'    >



相關推薦

C#反射/查詢屬性以及

    CSDN廣告是越來越多了,所有部落格筆記不再更新,新網址 DotNet筆記 遍歷一個類/或類物件的屬性/值,很有用,看個例子 using System; using System.Collections.Generic; using System.Linq; u

c標籤取maplist集合的物件屬性

今天寫批量列印功能時,後臺傳到前端的資料是map集合,以前沒用過,取值時出現了問題,在這裡記錄一下,備忘和複習時看: 1.前端主要部分如下: <body> <c:forEach var="fee" items="${map[\"EtImportFees\

java迴圈實體屬性和資料型別以及屬性

package com.walkerjava.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;

java實體屬性和數據以及屬性

取值 .get 數組 所有 system blog ++ 實體bean lds 遍歷實體類的樹形和數據類型一級屬性值 /** * 遍歷實體類的屬性和數據類型以及屬性值 * @param model * @throws NoSuchMe

C#如何一個窗體的某一種控制元件

      如果我要遍歷所有的Label控制元件.我們知道一個窗體中的所有控制元件都是Form.Controls中的成員,想要得到窗體中的所以成員,可以用foreach來遍歷Controls屬性中的物件。注意,Controls屬性中包含的物件都是以Control基類形式存在

指令碼工具之——在指定目錄及其所有子目錄下查詢檔案的指定關鍵詞

1、指令碼如下[[email protected] ~]# cat findKeyInDir.sh #!/usr/bin/env bash if [ $# -ne 2 ]; then echo "Usage: sh findKeyInDir <dir&g

查詢MDB高程點的高程有0的圖幅(用遊標查詢某個欄位的),並將查到的結果寫入到TXT

1、 mdbs = arcpy.ListWorkspaces("*","Access") 2、 FeatureClasses = arcpy.ListFeatureClasses() 3、 Fields = arcpy.ListFields(FeatureClass) 4、 cursor =

C#反射呼叫另外一個的私有欄位和方法

        /// <summary>        /// 設計器支援所需的方法 - 不要        /// 使用程式碼編輯器修改此方法的內容。        /// </summary>        private void InitializeComponent()  

java實體屬性和資料型別以及屬性

和同學接了個外包的活,由於專案中很多地方要用到poi匯出excel,而每次匯出都要寫很多相同的程式碼,因為poi的cell.setCellValue();每次設定的都是不同實體bean的屬性值,導致程式碼裡很多重複的值,我在想有沒有可以自動裝載bean的屬性及屬性值的方法。

unity利用反射或者結構體的每一個欄位屬性 、型別 、

C#利用反射遍歷類或者結構體中的每一個欄位的屬性 型別 值 using System.Collections; using System.Collections.Generic; using U

C#入門7.11——ArrayList元素的查詢

遍歷: foreach語句,object型別 object:ArrayList中儲存的型別不一定一支,也不一定能夠完全轉換,所以為了避免出錯,我們採用object型別。 using System; u

Type反射屬性

for except ons apps work void esp onf version <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup>

c forEach 集合的元素屬性詳解,判斷是否是最後一個元素,

分享一下我老師大神的人工智慧教程吧。零基礎,通俗易懂!風趣幽默!http://www.captainbed.net/ 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

java實體屬性和型別,屬性

[java] view plain copy print? publicstaticvoid testReflect(Object model) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentExcept

java實體屬性和型別,並賦和獲取

import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Dat

[c#.net]一個對象所有的屬性

through 圖片 ict init 空類 alt style for inf 利用反射 SpDictItem sp = GetCFHObject.GetSpItem("655"); PropertyInfo[] propertys = sp.GetType().

Java如何利用File遞歸的指定目錄的所有文件和文件夾

generated class pan 目錄 遍歷 tabs () tab java package cuiyuee; import java.io.File; import java.util.ArrayList; import java.util.List; pu

實體屬性

main int lds true () cep declared person generate public static void main(String[] args) throws IllegalArgumentException, IllegalAccessEx

Java實體(處理MongoDB)

boot common ech set declare code mod exc reflect 在實際過程中,經常要將實體類進行封裝,尤其是處理數據庫的過程中;因此,對於遍歷實體類能夠與數據庫中的一行數據對應起來。 我是使用的環境是Spring boot,訪問的數據庫時M

pb查詢資料庫資料問題(資料庫為 sql server)

指標可以實現但是不推薦 例如:(部分程式碼)  for ll_a = 1 to ll_count    ll_b = ll_i +  ll_a  //插入行行號先下移一位    dw_main.insertrow(l