找到控制台应用程序的行号?

时间:2014-10-07 01:41:26

标签: c#

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

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

输出:

Foo Bar

酒吧

Bar Foo

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以使用.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");

答案 2 :(得分:0)

实际上,每次执行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));