我有一个使用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
答案 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));