今天在自我規范程序設計的時候,變量名匹配字符串來自配置文件,網上找了一會兒發現也有朋友在找尋這種方式,很不容易找到一個解決方案來自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);
string tips = test_name.GetVarName(it => 1==1);
很多有經驗的IT朋友應該也發現了實現原理,利用了lambda表達式。
上述調用看起來參數有點過剩,個人習慣。
下面是非擴展的調用演示
bool test_name = true;
string tips = 類名.GetVarName(it => test_name);
string tips = 類名.GetVarName(it => test_name);
看起來好像跟上面的區別也僅是用什么點出這個方法,所以這個就得看個人習慣
個人認為在IT上還是菜鳥,第一次寫博客,我就不多說了,上述經過測試,並未測試完全。希望有其它意見的朋友指正!
