link: http://www.cnblogs.com/gongy/p/lm-2015-04-03.html

今天在自我规范程序设计的时候,变量名匹配字符串来自配置文件,网上找了一会儿发现也有朋友在找寻这种方式,很不容易找到一个解决方案来自http://www.th7.cn/Program/net/201404/187358.shtml

下面就是今天找到的进行详细解答

首先需要自定义一个静态方法

/// <summary>

///扩展获取变量名称(字符串)

/// </summary>

/// <param name="var_name"></param>

/// <param name="exp"></param>

/// <returns>return string</returns>

public static string GetVarName<T>(this T var_name, System.Linq.Expressions.Expression<Func<T, T>> exp)

{

return ((System.Linq.Expressions.MemberExpression)exp.Body).Member.Name;

}

以上是为了调用方便所以使用了扩展不喜欢的朋友可以用下方的方式 方法可以直接写工具类中

/// <summary>

///获取变量名称

/// </summary>

/// <param name="exp"></param>

/// <returns>return string</returns>

public static string GetVarName<T>(System.Linq.Expressions.Expression<Func<T, T>> exp)

{

return ((System.Linq.Expressions.MemberExpression)exp.Body).Member.Name;

}

下面是扩展的调用演示

bool test_name = true; //变量类型可随意
      string tips = test_name.GetVarName(it => test_name);//返回结果 “test_name“

执行只能是你要返回变量,局部变量随意。

不能在匿名方法里写其它否则报错。

(以下错误演示)

bool test_name = true;
      string tips = test_name.GetVarName(it => 1==1);

很多有经验的IT朋友应该也发现了实现原理,利用了lambda表达式。

上述调用看起来参数有点过剩,个人习惯。

下面是非扩展的调用演示

bool test_name = true;
     string tips = 类名.GetVarName(it => test_name);

看起来好像跟上面的区别也仅是用什么点出这个方法,所以这个就得看个人习惯

希望有其它意见的朋友指正!

问题:

string tips = test_name.GetVarName(it => test_name);//返回结果 “test_name“

调用过于复杂和冗余,能否改成

string tips = test_name.GetVarName();//返回结果 “test_name“

标签: C#, 获取变量名称

【转】 C# 小技巧之获取变量名称的更多相关文章

  1. 【冷门】 C# 小技巧之获取变量名称

    今天在自我规范程序设计的时候,变量名匹配字符串来自配置文件,网上找了一会儿发现也有朋友在找寻这种方式,很不容易找到一个解决方案来自http://www.th7.cn/Program/net/20140 ...

  2. bash小技巧1 获取文件当前路径

    我们linux获取文件当前路径一般问 #逼格不够高 [root@xxxx]# pwd 高逼格 SHELL_FOLDER=$(dirname $(readlink -f "$0"))

  3. Linux运维之——每日小技巧,获取网站请求数的前20个IP

    获取网站请求书的前20个IP |grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20

  4. python 小技巧之获取固定下面包含的某种类型文件的个数

    遇到这样一个问题.我想要统计某个文件夹下有多少个py文件怎么办. 用python能解决吗?答案,能. 解决办法,使用glob 代码如下: import glob path_file_number=gl ...

  5. jquery获取json对象中的key小技巧

    jquery获取json对象中的key小技巧 比如有一个json var json = {"name" : "Tom", "age" : 1 ...

  6. laravel获取checkbox值的小技巧

    以前老是用三元运算符来判断,现在有了更好的方法: 1.html代码 <input type="hidden" name="approved" value= ...

  7. 两个sed小技巧:sed "/变量/变量/"

    两个sed小技巧 在写shell时使用sed处理一些输出,遇到两个问题,在网上找到了相应的解决办法,在此处备份一下. [ sed处理空字符 ] 空字符,它的ASCII码值为0.在sed中如何标识空字符 ...

  8. 【每日一个小技巧】Python | input的提示信息换行输出,提示信息用变量表示

    [每日一个小技巧]Python | input的提示信息换行输出,提示信息用变量表示 在书写代码的途中,经常会实现这样功能: 请输入下列选项前的序号: 1.选择1 2.选择2 3.选择3 在pytho ...

  9. sql server 小技巧(5) Sql server 获取指定字符后的所有字符 - 去掉指定字符前的所有字符

    select top 10  SUBSTRING( sproductcode, CHARINDEX('-', SProductCode)+1, LEN(SProductCode)) from csmr ...

随机推荐

  1. 开源共享一个训练好的中文词向量(语料是维基百科的内容,大概1G多一点)

    使用gensim的word2vec训练了一个词向量. 语料是1G多的维基百科,感觉词向量的质量还不错,共享出来,希望对大家有用. 下载地址是: http://pan.baidu.com/s/1boPm ...

  2. View加载过程

    1. 先判断子类是否重写了loadView,如果有直接调用.之后调viewDidLoad完成View的加载.2 .如果是外部通过调用initWithNibName:bundle指定nib文件名的话,V ...

  3. eclipse 安装svn插件

    1.下载最新的Eclipse,我的版本是3.7.2 indigo(Eclipse IDE for Java EE Developers)版    如果没有安装的请到这里下载安装:http://ecli ...

  4. tony_iptables_01_linux下IPTABLES配置详解(转)

    如果你的IPTABLES基础知识还不了解,建议先去看看. 开始配置 我们来配置一个filter表的防火墙. (1)查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables - ...

  5. 一次完整的HTTP请求流程

    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1. 建立TCP连接: 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接, ...

  6. <页面里折合与打开>

    主要思想是:通过覆盖,显示的方式.visible 为 true与false,id以及function函数中参数的不同. 具体代码如下: <script type="text/javas ...

  7. js中使用进行字符串传参

    在js中拼接html标签传参时,如果方法参数是字符串需要加上引号,这里需要进行字符转义 <a href='javascript:addMenuUI("+"\"&qu ...

  8. CentOS 6.5安装Oracle 11.2.0.4------CentOS 6.5安装

    规划: IP:192.168.213.199 mask: 255.255.255.0 gateway:192.168.213.1 DNS1:202.101.172.35 磁盘分区: 磁盘总大小:25G ...

  9. Delphi系统变量:IsMultiThread对MM的影响

    前几日,调试一BUG,过程先不说,最后调试到MM,即Debug dcu,然后进入到GetMem.inc中的Get/FreeMem函数处后,出现AV. 然后一通找...郁闷了N天,后来发现将MM切换到Q ...

  10. 造轮子之数据库对比工具DataBaseComparer

    最近同时在维护好几个项目,有些项目是SqlServer的,另一些是MySql的,DBA推荐了一个线上库和线下库的对比工具,用的时候经常会在对比时,半天都没有进度.索性自己这次造个轮子,做了一个纯对比数 ...