查找控制台应用程序的行号

本文关键字:应用程序 控制台 查找 | 更新日期: 2023-09-27 18:25:48

我有一个使用Console.WriteLine()的程序;以在程序中的许多不同位置向用户输出。有没有一种方法可以获得控制台应用程序中最后打印的输出行是哪一行?不增加每个Console.WriteLine();的计数器;。例如,在下面的代码中,"Bar Foo"将打印为第4行。下面是一个示例程序:

Console.WriteLine("Foo");
Console.WriteLine("Foo Bar");
Console.WriteLine("Bar");
Console.WriteLine("Bar Foo");

输出:

Foo

Foo Bar

条形

Bar Foo

查找控制台应用程序的行号

您可以使用.Net 4.5中引入的CallerLineNumber
你可能有这样的东西:

static void WriteLine(string message, [CallerLineNumber] int lineNumber = 0)
{
    Console.WriteLine(lineNumber + ": " + message);
}

在你的源代码中,你可以简单地称之为:

WriteLine("Foo");
WriteLine("Foo Bar");
WriteLine("Bar");
WriteLine("Bar Foo");

如果你必须使用较低版本的.Net,你可以使用:

static void WriteLine(string message)
{
    StackFrame callStack = new StackFrame(1, true);
    var lineNumber = callStack.GetFileLineNumber();
    Console.WriteLine(lineNumber + ": " + message);
}

再说一遍,你只需要称之为:

WriteLine("Foo");
WriteLine("Foo Bar");
WriteLine("Bar");
WriteLine("Bar Foo");

不,您需要一些自定义的东西来跟踪它。但是,您可以将其内部化,并创建自己的类来包装Console.WriteLine,以避免重复的计数器逻辑。

实际上,每次执行Console.WriteLine()时,光标也会移动。因此,您可以使用光标的位置作为行号的基于0的索引:

        Console.WriteLine("Foo" + (Console.CursorTop+1));
        Console.WriteLine("Foo Bar" + (Console.CursorTop + 1));
        Console.WriteLine("Bar" + (Console.CursorTop + 1));
        Console.WriteLine("Bar Foo" + (Console.CursorTop + 1));