这是.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. 用线框模式绘制多边形 glPolygonMode

    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glBegin(GL_TRIANGLES);//开始以g_ViewMode模式绘制 glColor3ub(182. ...

  2. 数据库TSQL语句

    一.创建数据库create database test3;二.删除数据库drop database test3;三.如何创建表create(创建) table(表) test(表名)(此处写列 var ...

  3. 消息队列MQ - Apache ActiveMQ

    Apache ActiveMQ是Apache软件基金会所研发的开放源码消息中间件:由于ActiveMQ是一个纯Jave程式,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行. 1.que ...

  4. adb device 调试

    1. kill掉占用adb端口的进程 netstat -aon|findstr "5037" TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 6540 ...

  5. NYOJ题目770仿射密码

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAs4AAAIUCAIAAACFKz0yAAAgAElEQVR4nO3dPXLruLaG4TsJ5RqIYw

  6. 20145206邹京儒《Java程序设计》第一周学习总结

    20145206 <Java程序设计>第1周学习总结 教材学习内容总结 1.三大平台:Java SE.Java EE与Java ME.Java SE是各应用平台的基础,分为四个主要的部分: ...

  7. poj 1701【数学几何】

    The area Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  8. 图结构练习——最短路径(floyd算法(弗洛伊德))

    图结构练习——最短路径 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  给定一个带权无向图,求节点1到节点n的最短路径.   输 ...

  9. c++ 左值右值 函数模板

    1.先看一段代码,这就是一种函数模板的用法,但是红色的部分如果把a写成a++或者写成一个常量比如1,都是编译不过的,因为如果是a++的话,实际上首先是取得a的 值0,而0作为一个常量没有地址.写成1也 ...

  10. .NET NLog 详解(一)

    安装NLog NLog 的源代码托管在Github 上,一般的人直接使用NuGet就可以了. 这里我们选择安装NLog.Config.当然最方便的还是直接使用命令行: Install-Package ...