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

    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#反射遍历/查询类中的属性以及值的更多相关文章

  1. Java使用PropertyDescriptor获取实体类中私有属性的值,并给私有属性赋值

    大家都知道Java类中的私有的(private)属性是获取不到的(即使使用继承依然获取不到),那如果非要获取私有属性的值怎么办呢?一般的做法是将该java类封装称为一个JavaBean,即封装该私有属 ...

  2. java中遍历实体类,获取属性名和属性值

    方式一(实体类): //java中遍历实体类,获取属性名和属性值 public static void testReflect(Object model) throws Exception{ for ...

  3. 使用反射获取类中的属性(可用于动态返回PO类的列,当做表格的表头)

    //利用反射取类中的属性字段 try { Class clazz = Class.forName("houji.bean.model.TaskModel"); Field[] fi ...

  4. Delphi 遍历类中的属性

    http://blog.csdn.net/easyboot/article/details/8004954 Delphi 遍历类中的属性 标签: delphistringbuttonclassform ...

  5. c#利用反射实现对类中的常量进行取值和对应常量的注释

    C#利用反射实现对类中的常量进行取值和对应常量的注释 项目示例:https://gitee.com/dhclly/IceDog.GenerateErrorCode 因为业务需要,项目中有大量的错误码, ...

  6. 转载:java 中对类中的属性使用set/get方法的意义和用法

    经常看到有朋友提到类似:对类中的属性使用set/get方法的作用?理论的回答当然是封闭性之类的,但是这样对我们有什么作用呢?为什么要这样设计?我直接使用属性名来访问不是更直接,代码更简洁明了吗?下面我 ...

  7. Android反射出一个类中的其他类对象并调用其对应方法

    MainActivity如下: package cn.testreflect; import java.lang.reflect.Field; import java.lang.reflect.Met ...

  8. 尚硅谷面试第一季-11MyBatis中当实体类中的属性名和表中的字段名不一样怎么办

    问题: MyBatis中当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 解决方案: 1.写sql语句时起别名 <!-- id属性:必须是接口中方法的方法名 resultType属性:必须是 ...

  9. 关于System类中out属性 实例化的问题

    System类中out属性的声明是这样的: public final static PrintStream out = nullPrintStream(); private static PrintS ...

随机推荐

  1. Nginx反向代理的简单实现

    1)nginx的反向代理:proxy_pass2)nginx的负载均衡:upstream 下面是nginx的反向代理和负载均衡的实例: 负载机:A机器:103.110.186.8/192.168.1. ...

  2. webpack详细配置解析

    阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段时间慢慢阅读本 ...

  3. 个人github链接及git学习心得总结

    个人github链接 https://www.github.com/liangjianming/test git学习心得总结​ git是一个快速,开源,分布式的版本控制系统. GitHub是一个基于w ...

  4. jisuanqi

    1.jisuanqi 2.https://github.com/12wangmin/text/tree/master 3.计算截图 7+8 清除 4.总结 通过课程设计,主要要达到两个目的,一是检验和 ...

  5. 最新一课 老师指点用Listview适配器

    上课前 <?xml version="1.0" encoding="utf-8"?>    <ScrollView xmlns:android ...

  6. pandas获取groupby分组里最大值所在的行,获取第一个等操作

    pandas获取groupby分组里最大值所在的行 10/May 2016 python pandas pandas获取groupby分组里最大值所在的行 如下面这个DataFrame,按照Mt分组, ...

  7. 文件I/O操作

    熟悉文件的各种流类 了解字符的编码 掌握文件I/O操作的相关概念 了解对象的序列化 简单的引入 I:input  由外围输入到内存 O:output  由内存写出到外存. I/O:是相对于内存来说的 ...

  8. WIN10基于Hyper-V下运行kubernetes入门问题

    http://www.cnblogs.com/shanyou/p/8503839.html 安装配置好之后启动,查看ip的方法: minikube status minikube ip 查看仪表盘da ...

  9. Hadoop and net core a match made in docker

    https://blog.sixeyed.com/hadoop-and-net-core-a-match-made-in-docker/

  10. Java 泛型 1例

    private <T> T getFirstItem(List<T> list) {        T item = null;        if(list != null ...