我需要从特定方法获取总行数。 我有以下代码:
MethodInfo[] methodInfos = typelist[i].GetMethods();
from methodInfos[0]
我怎样才能得到它?
答案 0 :(得分:3)
你无法做到,例如这些方法将编译成相同的 IL代码
// One line
public static void Sample() {
Console.Write("abc"); Console.Write("def");
}
// Two lines
public static void Sample() {
Console.Write("abc");
Console.Write("def");
}
// Three lines
public static void Sample() {
Console.Write("abc");
// Some comment
Console.Write("def");
}
答案 1 :(得分:1)
MethodInfo是.NET反射的一部分。这将为您提供有关.NET类型模型的任何信息。不幸的是(?!?)代码行的数量不属于该信息。类型模型独立于您选择编写方法的语言。如果您想知道代码行的数量,则必须采用不同的方法。 (ReSharper插件或rosalyn)
答案 2 :(得分:1)
您可以抛出2个异常并获取行。
我在下面写了一些(棘手的)代码:
public class Program
{
private static int first = 0, second = 0;
private static void Log(Exception ex, bool last = false)
{
var st = new StackTrace(ex, true);
var frame = st.GetFrame(0);
if(last)
{
second = frame.GetFileLineNumber();
Console.WriteLine("Total lines: {0}", second - first);
}
else
{
first = frame.GetFileLineNumber();
}
}
private static void Test()
{
try { throw new Exception("Ex1"); } catch(Exception ex) { Log(ex); }
int a = 5;
string b = "text";
bool c = false;
try { throw new Exception("Ex2"); }catch(Exception ex) { Log(ex, true); }
}
private static void Main()
{
Test();
Console.ReadLine();
}
}
所以,它只是获取异常行号并减去它们,我们有行数!
编辑另外,我认为它不会总是如此,因为编译器会做一些优化,JIT也是等等。(我几乎不记得这个过程对不起)它可能是不可能的但这很接近。