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' >
C#反射遍历/查询类中的属性以及值的更多相关文章
- Java使用PropertyDescriptor获取实体类中私有属性的值,并给私有属性赋值
大家都知道Java类中的私有的(private)属性是获取不到的(即使使用继承依然获取不到),那如果非要获取私有属性的值怎么办呢?一般的做法是将该java类封装称为一个JavaBean,即封装该私有属 ...
- java中遍历实体类,获取属性名和属性值
方式一(实体类): //java中遍历实体类,获取属性名和属性值 public static void testReflect(Object model) throws Exception{ for ...
- 使用反射获取类中的属性(可用于动态返回PO类的列,当做表格的表头)
//利用反射取类中的属性字段 try { Class clazz = Class.forName("houji.bean.model.TaskModel"); Field[] fi ...
- Delphi 遍历类中的属性
http://blog.csdn.net/easyboot/article/details/8004954 Delphi 遍历类中的属性 标签: delphistringbuttonclassform ...
- c#利用反射实现对类中的常量进行取值和对应常量的注释
C#利用反射实现对类中的常量进行取值和对应常量的注释 项目示例:https://gitee.com/dhclly/IceDog.GenerateErrorCode 因为业务需要,项目中有大量的错误码, ...
- 转载:java 中对类中的属性使用set/get方法的意义和用法
经常看到有朋友提到类似:对类中的属性使用set/get方法的作用?理论的回答当然是封闭性之类的,但是这样对我们有什么作用呢?为什么要这样设计?我直接使用属性名来访问不是更直接,代码更简洁明了吗?下面我 ...
- Android反射出一个类中的其他类对象并调用其对应方法
MainActivity如下: package cn.testreflect; import java.lang.reflect.Field; import java.lang.reflect.Met ...
- 尚硅谷面试第一季-11MyBatis中当实体类中的属性名和表中的字段名不一样怎么办
问题: MyBatis中当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 解决方案: 1.写sql语句时起别名 <!-- id属性:必须是接口中方法的方法名 resultType属性:必须是 ...
- 关于System类中out属性 实例化的问题
System类中out属性的声明是这样的: public final static PrintStream out = nullPrintStream(); private static PrintS ...
随机推荐
- J-query extend()方法
1.如果没有冲突参数会弥在后面. 2.参数如果和前面的参数存在相同的名称,那么后面的会覆盖前面的参数值.
- macaca使用中问题解决方法整理
报告老板:很多同学在搭建macaca的环境时候,出现了各种问题,尤其是使用windows的同学,更是复杂且费劲的要命,我这里针对一些遇到的坑,按照从头的搭建开始说起,如下 基本的搭建条件要满足基础环境 ...
- SpringCloud设定Feign底层实现
1. 概述 版本: spring-boot: 1.5.9.RELEASE spring-cloud: Dalston.SR5 在默认情况下 spring cloud feign在进行各个子服务之间的 ...
- swap函数
#include<iostream> using namespace std; void swap(int& a,int& b){ int t=a; a=b; b=t; } ...
- Linux实践一:问题及解决
安装ubuntu出现的问题 : 打开镜像.iso文件,v-box好像是不识别这种格式的,它识别的好像是.vdi等格式,所以要用vm虚拟机打开镜像安装 打开镜像,按照步骤安装后,安装很久后,出现问题.初 ...
- git工具
1.Git Bash常用命令: pwd 当前工作目录 clear 清屏 ls 列举当前目录下的文件及文件夹 cd 更改目录 mkdir 创建目录 touch 创建空文件 cp 拷 ...
- Java用JSoup组件提取asp.net webform开发网页的viewstate相关相关参数
/** * 从页面中提取特定input的的Value * @param formparams * @param document * @param elementId */ private void ...
- HTTP Client使用总结
1.如果服务器使用HTTPS协议,使用HTTPClient的话,需要配以EasySSLProtocolSocketFactory 2.Tomcat对HTTP的Post和Get请求处理是不一样的.Spr ...
- Ubuntu设置静态IP的方法
通过修改配置文件/etc/network/interfaces,如果/etc/resolv.conf中提示nameserver会被resolvconf修改,是临时文件,那么dns server也可以在 ...
- 【转帖】M1、M2增速
M1.M2增速的背离与广义财政的资金滞留有关 作者: 万钊 2016-07-19 17:20 近期M1.M2增速的背离,引起了各方的极大关注.我们知道,M1以活期存款为主,具有高波动性,其增速与M2背 ...