今天在自我规范程序设计的时候,变量名匹配字符串来自配置文件,网上找了一会儿发现也有朋友在找寻这种方式,很不容易找到一个解决方案来自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);
执行只能是你要返回变量,局部变量随意。不能在匿名方法里写其它否则报错。
(以下错误演示)
bool test_name = true;
string tips = test_name.GetVarName(it => 1==1);
很多有经验的IT朋友应该也发现了实现原理,利用了lamda表达式。
上述调用看起来参数有点过剩,个人习惯。
下面是非扩展的调用演示
bool test_name = true;
string tips = 类名.GetVarName(it => test_name);
看起来好像跟上面的区别也仅是用什么点出这个方法,所以这个就得看个人习惯
个人认为在IT上还是菜鸟,第一次写博客,我就不多说了,上述经过测试,并未测试完全。希望有其它意见的朋友指正!
时间: 2024-10-18 03:45:48