这是.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. nfs server的配置 Starting NFS daemon: [FAILED]

    总结了一下是nfs server的制作过程:nfs(Network File System)其实就是说,这个机器的硬盘不够了,我要把文件放到别的服务器上去,服务器端的配置如下:首先(1)确保你的机器上 ...

  2. Volley学习总结

    本文主要包括以下内容 volly基本操作(String与Json类型) volly图片操作 自定义volly volly源码分析 Volley简单易用,在性能方面也进行了大幅度的调整,它的设计目标就是 ...

  3. linux eclipse3.6.1 maven安装

    linux maven安装及 eclipse maven插件安装,有需要的朋友可以参考下. 1. maven的安装(apache-maven-3.0.5为例):  a.官网地址:http://mave ...

  4. 数据结构和算法 – 11.高级排序算法(下)

    三.选择类排序 3.1.简单选择排序 http://www.cnblogs.com/tangge/p/5338734.html#XuanZe 3.2 堆排序 要知道堆排序,首先要了解一下二叉树的模型. ...

  5. 谈谈Delphi中的类和对象4---类是一种对数据和操作高度的封装机制 && 类是一种代码重用机制

    五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; publ ...

  6. Spell checker

     Spell checker Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...

  7. Python无类再理解--metaclass,type

    上次理解过一次,时间久了,就忘了.. 再学习一次.. http://blog.jobbole.com/21351/ ======================= 但是,Python中的类还远不止如此 ...

  8. 轻松搞定javascript预解析机制(搞定后,一切有关变态面试题都是浮云~~)

    hey,guys!我们一起总结一下JS预解析吧! 首先,我们得搞清楚JS预解析和JS逐行执行的关系.其实它们两并不冲突,一个例子轻松理解它们的关系: 你去酒店吃饭,吃饭前你得看下菜谱,点下菜(JS预解 ...

  9. Linux下autoconf和automake使用

    转载:www.cnblogs.com/itech/archive/2010/11/28/1890220.html

  10. c#基础系列(转)

    转:http://www.cnblogs.com/landeanfen/p/4953025.html C#基础系列——一场风花雪月的邂逅:接口和抽象类 前言:最近一个认识的朋友准备转行做编程,看他自己 ...