【问题标题】:Find the line number of console application? [duplicate]查找控制台应用程序的行号? [复制]
【发布时间】:2014-10-07 01:41:26
【问题描述】:

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

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

输出:

美食吧

酒吧

吧友

【问题讨论】:

标签: c#


【解决方案1】:

您可以使用CallerLineNumber 中介绍的.Net 4.5
你可能有这样的事情:

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】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-01-22
        • 2011-06-24
        • 1970-01-01
        • 1970-01-01
        • 2010-11-04
        • 1970-01-01
        • 2013-02-11
        • 2019-01-30
        • 1970-01-01
        相关资源
        最近更新 更多