更简单的方法来打印成排的盒子到控制台?

Easier way to print rows of boxes to console?

我想知道,我正在制作一个计算器 C# 控制台应用程序只是为了练习语言,我已经设置了一个小显示器来打印包含数字的零框。我在它下面设置了一种图例,所以每个数字都对应一个方程式,例如1 = 形状的面积,2 = 函数。它打印正确,但问题是我的代码如下所示:

static void WriteMenu()
{
    Console.WriteLine("\n \n");
    Console.WriteLine("  OOOOOOOO     OOOOOOOO     OOOOOOOO     OOOOOOOO     OOOOOOOO\n  O      O     O      O     O      O     O      O     O      O");
    Console.WriteLine("  O  1   O     O  2   O     O  3   O     O  4   O     O  5   O\n  O      O     O      O     O      O     O      O     O      O");
    Console.WriteLine("  OOOOOOOO     OOOOOOOO     OOOOOOOO     OOOOOOOO     OOOOOOOO");
    Console.WriteLine("\n \n");
    Console.WriteLine("  OOOOOOOO     OOOOOOOO     OOOOOOOO     OOOOOOOO     OOOOOOOO\n  O      O     O      O     O      O     O      O     O      O");
    Console.WriteLine("  O  6   O     O  7   O     O  8   O     O  9   O     O  10  O\n  O      O     O      O     O      O     O      O     O      O");
    Console.WriteLine("  OOOOOOOO     OOOOOOOO     OOOOOOOO     OOOOOOOO     OOOOOOOO");            
}

我只是想知道是否有更简单的方法,所以如果将来我想做任何类似的事情(打印文本组)而没有一堆丑陋的 WriteLines。如前所述,我是初学者,所以我对这门语言了解不多。

它应该打印的方式是 2x4,这是主要困难的来源。

您可以在字符串上使用 @(逐字字符串文字修饰符):

var text = @"This
is my multi-
line string";

您可以将单个框分成不同的行。为每一行创建一个变量。然后根据您需要多少个盒子,您可以根据需要多次添加该行。将其封装到一个单独的方法中,并根据需要多次调用它。下面的示例为简单整数构建框:

class Program
{
    static void Main(string[] args)
    {
        List<int> numbers1 = new List<int>() { 0, 1, 2, 3, 4 };
        List<int> numbers2 = new List<int>() { 5, 6, 7, 8, 9 };

        DisplayBoxedInts(numbers1);
        DisplayBoxedInts(numbers2);

        Console.ReadLine();
    }

    public static void DisplayBoxedInts(IEnumerable<int> numbers)
    {
        var boxLine1 = "ooooooo ";
        var boxLine2 = "o     o ";
        var boxLine3 = "o  {0}  o ";
        var boxLine4 = "o     o ";
        var boxLine5 = "ooooooo ";

        var count = numbers.Count();

        var multiBoxLine1 = string.Empty;
        var multiBoxLine2 = string.Empty;
        var multiBoxLine3 = string.Empty;
        var multiBoxLine4 = string.Empty;
        var multiBoxLine5 = string.Empty;

        foreach (var num in numbers)
        {
            multiBoxLine1 += boxLine1;
            multiBoxLine2 += boxLine2;
            multiBoxLine3 += string.Format(boxLine3, num);
            multiBoxLine4 += boxLine4;
            multiBoxLine5 += boxLine5;
        }

        Console.WriteLine(multiBoxLine1);
        Console.WriteLine(multiBoxLine2);
        Console.WriteLine(multiBoxLine3);
        Console.WriteLine(multiBoxLine4);
        Console.WriteLine(multiBoxLine5);
    }
}

结果和你的相似:

但是请注意,此解决方案适用于单个整数。如果它们开始变大,您必须考虑更好地对齐盒子的侧面。也许在盒子的内容和它的边之间添加 \t