C#使用StackTrace、StackFrame、MethodBase获取当前属性时遇到的麻烦
来源:互联网 发布:mac os x 更新 编辑:程序博客网 时间:2024/05/21 06:16
有一个WCF项目,需要在GET、SET方法内部调用一个方法得到当前属性的名称。
在查阅一番之后,可以使用定位帧的方法得到相关的结果,代码如下:
public string GetPN() { StackTrace trace = new StackTrace(true); StackFrame frame = trace.GetFrame(1);//1代表上级,2代表上上级,以此类推 MethodBase method = frame.GetMethod(); //获得当前方法名称 //Console.WriteLine(memberName); Console.WriteLine(method.Name); try { var property = (from f in method.DeclaringType.GetProperties() where f.GetSetMethod() == method || f.GetGetMethod() == method select f).FirstOrDefault(); return property.Name; } catch { return null; } }
在DEBUG编译模式下,能够获得正确的属性名称。
但是更换为RELEASE编译模式下,却报错提升不能获得属性。
如上面两张图片看出来,同样的frame.GetMethod(),一个获得的是属性里面的SET方法,一个获得的是调用此类的方法。这是导致此方法不能满足条件的原因。
由此可以看出Release在编译的时候,将引用类的指针从帧中删除掉了。
解决方法:
将NET4.0更换为NET4.5,此问题自动修复,说明NET4.5中编译时并不会省略引用类的指针。
另外一个方案如下:
public string GetPN([callerMemberName] string memberName="") { return memberName;//自动获得调用此方法的属性名称 }
以上方案是NET4.5出现的新特征
阅读全文
0 0
- C#使用StackTrace、StackFrame、MethodBase获取当前属性时遇到的麻烦
- StackTrace和StackFrame使用笔记
- C#使用StackTrace获取方法被谁调用
- 现在出现一个使用msxml获取属性值的麻烦
- 使用CCS时遇到的的一些麻烦
- 使用 C# 获取当前用户的SID
- DLL文件注册时遇到的麻烦
- Twitter遇到的麻烦
- 项目遇到的麻烦
- 浅谈C# StackTrace 类的实例说明
- 使用MATLAB过程中遇到的一点小麻烦 theta
- ndk-stacktrace-analyzer 工具的使用
- C# 获取当前正在使用的网卡地址
- SharePoint使用 C# 获取当前用户的SID
- 使用C#获取当前Windows所设定的时区
- 关于java方法调用时产生的StackFrame内部内容。
- 初学java遇到的麻烦
- Gcc上遇到的麻烦!!
- 整型数组左边减右边的最大差值
- java数组与循环
- 第5章_数组
- Hadoop权威指南笔记一
- Java中interface和abstract class的区别
- C#使用StackTrace、StackFrame、MethodBase获取当前属性时遇到的麻烦
- android JNI调用
- Linux(Centos)之安装Nginx及注意事项
- Arrays.asList()
- 4、RSA加密算法
- 小D辞职了,直到离开的那一刻,他依旧很困惑,还是很委屈。
- jsp的pageContext技术整理(网文摘录)
- opengl实现图像亮度调整
- pyqt 转exe前转换图片