字符串格式化程序是否可以用变量进行参数化

本文关键字:变量 参数 格式化 程序 是否 字符串 | 更新日期: 2023-09-27 18:14:56

示例

这里有一个例子:

public class Program
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Test {0, 10}", 1100);
        Console.WriteLine("Test {0, 10}", 2);
        Console.WriteLine("Test {0, 10}", 40);
    }
}

输出为:

Test       1100
Test          2
Test         40
Press any key to continue . . .

问题

是否可以使上述示例中的数字10变为变量?

以下描述了意图,但没有编译,因为预期的是string,而不是int:

public class Program
{
    public static void Main(string[] args)
    {
        int i = 10;
        Console.WriteLine("Test {0, i}", 1100);
        Console.WriteLine("Test {0, i}", 2);
        Console.WriteLine("Test {0, i}", 40);
    }
}

字符串格式化程序是否可以用变量进行参数化

使用C#6可以使用字符串插值:

Console.WriteLine($"Test {{0, {i}}}", 1100);
Console.WriteLine($"Test {{0, {i}}}", 2);
Console.WriteLine($"Test {{0, {i}}}", 40);

C#6中字符串插值的好处是它包括了变量的编译时检查。为了使字符串插值工作,您需要在字符串前面加一个美元符号($(。

另一个没有字符串插值的选项是:

int i = 10;
Console.WriteLine("Test {0, " + i + "}", 1100);
Console.WriteLine("Test {0, " + i + "}", 2);
Console.WriteLine("Test {0, " + i + "}", 40);

或者:

Console.WriteLine("Test " + 1100.ToString().PadLeft(i));
Console.WriteLine("Test " + 2.ToString().PadLeft(i));
Console.WriteLine("Test " + 40.ToString().PadLeft(i));

一个简单的解决方案是:

public class Program
{
    public static void Main(string[] args)
    {
        int i = 10;
        Console.WriteLine("Test {0, " + i + "}", 1100);
        Console.WriteLine("Test {0, " + i + "}", 2);
        Console.WriteLine("Test {0, " + i + "}", 40);
    }
}