public class A
{
public static void Test()
{
//这里怎么获取调用该方法的类信息?,比如下面的B
}
}
public class B
{
public void New()
{
A.Test();
}
}
不用传参数进来应该怎么处理?反射可以做到么?
14 个解决方案
#1
mark
#2
用反射
#3
怎么反射的到?试了其中的方法 没有什么作用
#4
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
foreach (System.Diagnostics.StackFrame sf in st.GetFrames())
{
Console.WriteLine(String.Format("File name:{0}, Line:{1}, Column:{2},MethodName:{3}", sf.GetFileName(), sf.GetFileLineNumber(), sf.GetFileColumnNumber(), sf.GetMethod().Name));
}
这么做一下,不需要用反射的。
(注意事项,如果你的程序发布到其他目录或者别的机器上,相关dll和exe的pdb都要带上,否则filename/linenumber之类的都得不到。
foreach (System.Diagnostics.StackFrame sf in st.GetFrames())
{
Console.WriteLine(String.Format("File name:{0}, Line:{1}, Column:{2},MethodName:{3}", sf.GetFileName(), sf.GetFileLineNumber(), sf.GetFileColumnNumber(), sf.GetMethod().Name));
}
这么做一下,不需要用反射的。
(注意事项,如果你的程序发布到其他目录或者别的机器上,相关dll和exe的pdb都要带上,否则filename/linenumber之类的都得不到。
#5
#6
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
for(int i=0;i< st.FrameCount;i++)
{
System.Diagnostics.StackFrame sf=st.GetFrame(i);
Console.WriteLine(String.Format("File name:{0}, Line:{1}, Column:{2},MethodName:{3}", sf.GetFileName(), sf.GetFileLineNumber(), sf.GetFileColumnNumber(), sf.GetMethod().Name));
}
GetFileName();结果为string.Empty;
Line:0;
Column:0
MethodName获取调用该方法所调用的所有方法名字,从最底层开始
for(int i=0;i< st.FrameCount;i++)
{
System.Diagnostics.StackFrame sf=st.GetFrame(i);
Console.WriteLine(String.Format("File name:{0}, Line:{1}, Column:{2},MethodName:{3}", sf.GetFileName(), sf.GetFileLineNumber(), sf.GetFileColumnNumber(), sf.GetMethod().Name));
}
GetFileName();结果为string.Empty;
Line:0;
Column:0
MethodName获取调用该方法所调用的所有方法名字,从最底层开始
#7
Debug条件下
#8
(注意事项,如果你的程序发布到其他目录或者别的机器上,相关dll和exe的pdb都要带上,否则filename/linenumber之类的都得不到。)
而且,你如果在IDE里面,你按F5而不是Ctrl+F5。
或者,build之后,把你的.pdb文件,复制到bin\obj\debug目录下,然后ctrl+f5。
而且,你如果在IDE里面,你按F5而不是Ctrl+F5。
或者,build之后,把你的.pdb文件,复制到bin\obj\debug目录下,然后ctrl+f5。
#9
mark
#10
是F5啊,obj下Debug下pdb也有的
#11
那你就不要再IDE下面运行,直接运行,看看结果。
(务必保证你自己所有相关dll的pdb都在同一个目录下面)
(务必保证你自己所有相关dll的pdb都在同一个目录下面)
#12
结果还是
GetFileName();结果为string.Empty;
Line:0;
Column:0
you are a super man, thanks for you kindness!!!!!!!
GetFileName();结果为string.Empty;
Line:0;
Column:0
you are a super man, thanks for you kindness!!!!!!!
#13
晕,到底好没好?我的分来历不明啊!
:$:$:$:$:$:$
:$:$:$:$:$:$
#14
GetFileName();结果为string.Empty;
Line:0;
Column:0
这几个不行,方法名获取到了
Line:0;
Column:0
这几个不行,方法名获取到了
#1
mark
#2
用反射
#3
怎么反射的到?试了其中的方法 没有什么作用
#4
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
foreach (System.Diagnostics.StackFrame sf in st.GetFrames())
{
Console.WriteLine(String.Format("File name:{0}, Line:{1}, Column:{2},MethodName:{3}", sf.GetFileName(), sf.GetFileLineNumber(), sf.GetFileColumnNumber(), sf.GetMethod().Name));
}
这么做一下,不需要用反射的。
(注意事项,如果你的程序发布到其他目录或者别的机器上,相关dll和exe的pdb都要带上,否则filename/linenumber之类的都得不到。
foreach (System.Diagnostics.StackFrame sf in st.GetFrames())
{
Console.WriteLine(String.Format("File name:{0}, Line:{1}, Column:{2},MethodName:{3}", sf.GetFileName(), sf.GetFileLineNumber(), sf.GetFileColumnNumber(), sf.GetMethod().Name));
}
这么做一下,不需要用反射的。
(注意事项,如果你的程序发布到其他目录或者别的机器上,相关dll和exe的pdb都要带上,否则filename/linenumber之类的都得不到。
#5
#6
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
for(int i=0;i< st.FrameCount;i++)
{
System.Diagnostics.StackFrame sf=st.GetFrame(i);
Console.WriteLine(String.Format("File name:{0}, Line:{1}, Column:{2},MethodName:{3}", sf.GetFileName(), sf.GetFileLineNumber(), sf.GetFileColumnNumber(), sf.GetMethod().Name));
}
GetFileName();结果为string.Empty;
Line:0;
Column:0
MethodName获取调用该方法所调用的所有方法名字,从最底层开始
for(int i=0;i< st.FrameCount;i++)
{
System.Diagnostics.StackFrame sf=st.GetFrame(i);
Console.WriteLine(String.Format("File name:{0}, Line:{1}, Column:{2},MethodName:{3}", sf.GetFileName(), sf.GetFileLineNumber(), sf.GetFileColumnNumber(), sf.GetMethod().Name));
}
GetFileName();结果为string.Empty;
Line:0;
Column:0
MethodName获取调用该方法所调用的所有方法名字,从最底层开始
#7
Debug条件下
#8
(注意事项,如果你的程序发布到其他目录或者别的机器上,相关dll和exe的pdb都要带上,否则filename/linenumber之类的都得不到。)
而且,你如果在IDE里面,你按F5而不是Ctrl+F5。
或者,build之后,把你的.pdb文件,复制到bin\obj\debug目录下,然后ctrl+f5。
而且,你如果在IDE里面,你按F5而不是Ctrl+F5。
或者,build之后,把你的.pdb文件,复制到bin\obj\debug目录下,然后ctrl+f5。
#9
mark
#10
是F5啊,obj下Debug下pdb也有的
#11
那你就不要再IDE下面运行,直接运行,看看结果。
(务必保证你自己所有相关dll的pdb都在同一个目录下面)
(务必保证你自己所有相关dll的pdb都在同一个目录下面)
#12
结果还是
GetFileName();结果为string.Empty;
Line:0;
Column:0
you are a super man, thanks for you kindness!!!!!!!
GetFileName();结果为string.Empty;
Line:0;
Column:0
you are a super man, thanks for you kindness!!!!!!!
#13
晕,到底好没好?我的分来历不明啊!
:$:$:$:$:$:$
:$:$:$:$:$:$
#14
GetFileName();结果为string.Empty;
Line:0;
Column:0
这几个不行,方法名获取到了
Line:0;
Column:0
这几个不行,方法名获取到了