这是.NET反射的一个有趣小例子:  通过反射将变量值转为变量名本身.

当然要先添加命名空间:using System.Reflection;

示例代码如下:

    class Program
{
string name = "strA";
string strA = "strB";
string strB = "Hello World~"; static void Main(string[] args)
{
Program p = new Program();
p.GetTypeValue(); p.GetStrValue(p.name); p.SetStrValue(p.strA); Console.ReadKey();
}
//本文原址:http://www.cnblogs.com/Interkey/p/3460566.html /// <summary>
/// 获取所有FieldInfo的值
/// </summary>
void GetTypeValue()
{
Console.WriteLine("Method: GetTypeValue");
FieldInfo[] fis = this.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo fi in fis)
{
Console.WriteLine(fi.Name + " 的值为:" + fi.GetValue(this).ToString());
}
Console.WriteLine();
} /// <summary>
/// 获取字符串str对应的变量名的变量值对应的变量值
/// </summary>
/// <param name="str"></param>
void GetStrValue(string str)
{
Console.WriteLine("Method: GetStrValue");
Type type = this.GetType(); //获取字符串str对应的变量名的变量值
Console.WriteLine(type.GetField(str, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this).ToString()); Console.WriteLine(
type.GetField(
type.GetField(str, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this).ToString(),
BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this).ToString()
);
Console.WriteLine();
} /// <summary>
/// 设置字符串str对应的变量名的变量值
/// </summary>
/// <param name="str"></param>
void SetStrValue(string str)
{
Console.WriteLine("Method: SetStrValue"); //赋值前输出
Console.WriteLine(this.GetType().GetField(str, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this)); //进行赋值操作
this.GetType().GetField(str, BindingFlags.NonPublic | BindingFlags.Instance).SetValue(this, "Hello Interkey~"); //赋值后输出
Console.WriteLine(this.GetType().GetField(str, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this));
Console.WriteLine();
}
//本文原址:http://www.cnblogs.com/Interkey/p/3460566.html
}

代码已经相当清晰,所以就不多做解释了~

本文原址:http://www.cnblogs.com/Interkey/p/3460566.html

.NET的反射可参考:反射概述 或 了解.NET中反射机制的使用与分析

.NET反射虽然执行效率相对较慢,但在软件破解过程中,作用却非常大。这里就留给有心人了~

本文的代码已上传到附件~

 

 

 

 

很想实现这个功能,就是把类某一个变量名转换为字符串,

直接使用ToString()是把该变量存放的数据转换为字符串的,

那该如何将变量名本身转换为字符串呢?

C#语言 128 次浏览 2011-01-01 19:48

7 个回答

好像映射和反射是关于这个方面的,你去了解下吧.

2011-01-01 20:21 推荐: 0 次

嗯,反射就是做这个的。LZ可以学下反射!

2011-01-01 20:23 推荐: 0 次

PropertyInfo[] peroperties = typeof(A).GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);

  foreach (PropertyInfo property in peroperties)

  {property .Name;

  property .PropertyType;  
}

2011-01-01 20:45 推荐: 0 次

有个偷懒的笨办法,对类进行xml序列化,然后可以从xml文件中得到各个属性名称、值 。。。

2011-01-01 22:34 推荐: 0 次

利用反射,代码如下:

C# code

//获取类型
Type userInfoType = typeof(UserInfo);
//获取属性
PropertyInfo[] propertys = userInfoType.GetProperties(BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.Static); //循环获取属性
foreach (PropertyInfo pi in propertys)
{
//获取属性名称
string propertyName = pi.Name;
}

通过反射将变量值转为变量名本身ZZ的更多相关文章

  1. 在c#中把字符串转为变量名并获取变量值的小例子(转)

    public class Program { public string str = "spp"; public string spp = "Hello World!&q ...

  2. C#里面中将字符串转为变量名

    public partial class Form1 : Form { string str = "spp"; public string spp = "very goo ...

  3. python动态赋值-把字符串转为变量名

    可以实现的方法有: globals(),locals(),eval(),exec() 演示: exce法 In [6]: exec('name="bob"') In [7]: na ...

  4. jmeter后置处理器 JSON Extractor取多个变量值

    1.需要获取响应数据的请求右键添加-后置处理器-JSON Extractor 2.如果要获取json响应数据多个值时,设置的Variable names (后续引用变量值的变量名设置)与JSON Pa ...

  5. JavaScript高级程序设计(复制变量值、传递参数)

    复制变量值 一个变量向另一个变量复制基本类型值和引用类型值时,是存在不同的. 一个变量向另一个变量复制基本类型的值,会在变量的对象上创建一个新值,然后把该值复制到为新变量分配的位置上. var num ...

  6. python字典键值对转化为相应的变量名和变量值

    将python字典键值对转化为相应的变量名和变量值可以使用以下方法: globals().update({"name":"value"}) locals().u ...

  7. 通过cmd查看环境变量名对应的环境变量值

    在VS环境中通常要添加路径,不过基本都是按照往上提供的方法添加变量名形如:$(VC_IncludePath),但是如何通过cmd命令找到真正的路径呢 未完待续……

  8. JDK环境变量中dt.jar、tools.jar等变量值的作用

    变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; tools.jar: 工具类 库,它跟我们程序中用到的 基础 ...

  9. 微信小程序----关于变量对象data 和 前端wxml取后台js变量值

    (一)页面变量对象data 对象data 有两个方面用途 第一,前端wxml的数据渲染是通过设置此对象中定义的变量进行关联展现的 第二,定义JS页面中的页面局部变量,使其整个页面中可使用或调用 对象d ...

随机推荐

  1. iOS - 开发类库

    开发类库   UI 项目名称 项目信息 1.MJRefresh 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明. ...

  2. Android之IPC机制

    Android IPC简介 任何一个操作系统都需要有相应的IPC机制,Linux上可以通过命名通道.共享内存.信号量等来进行进程间通信.Android系统不仅可以使用了Binder机制来实现IPC,还 ...

  3. EF学习 笔记-----EF映射

    http://www.cnblogs.com/guomingfeng/archive/2013/06/15/mvc-ef-configuration-migration.html EF flountA ...

  4. Clr Via C#读书笔记---线程基础

    趣闻:我是一个线程:http://kb.cnblogs.com/page/542462/ 进程与线程 进程:应用程序的一个实例使用的资源的集合.每个进程都被赋予了一个虚拟地址空间. 线程:对CPU进行 ...

  5. oracle一点记录

    查看数据库实例名(SERVICE_NAME): sql: select instance_name from v$instance; 如何知道oracle客户端是32位还是64的.windows下启动 ...

  6. Feature hashing相关 - 1

    考虑典型的文本分类,一个经典的方法就是     分词,扫描所有特征,建立特征词典 重新扫描所有特征,利用特征词典将特征映射到特征空间编号 得到特征向量 学习参数 w 存储学习参数 w , 存储特征映射 ...

  7. 在asp.net利用jquery.MultiFile实现多文件上传(转载)

    转载地址:http://www.cnblogs.com/scy251147/archive/2010/09/30/1839313.html 官网链接:http://www.fyneworks.com/ ...

  8. SQL Server数据库大型应用解决方案总结(转载)

    转载地址:http://hb.qq.com/a/20120111/000216.htm 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互联网应用,每天百万级甚至 ...

  9. elasticsearch入门

    到 https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.6.0.zip 下载最新包: 启动: ./elast ...

  10. 【荐】Spring事务配置的五种方式

    Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...