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. 【学】AngularJS日记(1) - 常用工具

    angular.isArray(a) 判断a是否为数组 angular.isDate 是否为时间对象 angular.isDefined 判断元素是否存在 angular.isUndefined an ...

  2. MySQL绿色版的安装(mysql-5.6.22-win32.zip)

    1.数据库下载 Mysql官方网站:http://www.mysql.com/,数据库下载地址:http://www.mysql.com/downloads/.从官方网站可以找到两种文件包,一种是ex ...

  3. OAF_开发系列27_实现OAF中Java类型并发程式开发调用XML Publisher(案例)

    20150814 Created By BaoXinjian

  4. CentOS7 修改主机名(转)

    转载出处:http://www.centoscn.com/CentOS/config/2014/1031/4039.html CentOS7 时间同步:http://www.cnblogs.com/r ...

  5. 十大Intellij IDEA快捷键(转)

    1 智能提示 Intellij首当其冲的当然就是Intelligence智能!基本的代码提示用Ctrl+Space,还有更智能地按类型信息提示Ctrl+Shift+Space,但因为Intellij总 ...

  6. (转)Java:按值传递和按引用传递详细解说

    值传递和引用传递详解: 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递.示例如下: public class TempTest { private void test1(int a ...

  7. 实用的Portraiture滤镜磨皮教程

    滤镜可以快速地进行人物皮肤美化处理,Portraiture滤镜可以将皮肤柔化,消除多余的斑点,在磨皮后复制细节保留较多的通道到图层面板,用高反差保留滤镜提取细节,再更改图层混合模式即可以得到漂亮的肤色 ...

  8. 【IL】IL生成exe的方法

    1.将ilasm.exe和fusion.dll用everything找出来,然后复制到system32文件夹 2.执行:ilasm /res:code.res code.il /out:code.ex ...

  9. Norflash控制器的Verilog建模之二(仿真)

    前言:经过几天修改,norflash控制器基本已经完成,通过仿真.完整的norflash包含2个模块:直接操作硬件的norflash_ctrl.v与控制ctrl模块的驱动norflash_driver ...

  10. Django中提示TemplateDoesNotExist?

    用的是1.9版本.需要在settings.py文件中设置TEMPLATES下的DIRS如下: TEMPLATES = [ { 'BACKEND': 'django.template.backends. ...