在 Console.WriteLine 内传递值

Passing value inside Console.WriteLine

这是正在处理的一段代码

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Enter the number to find factorial : ");
        var fac = Convert.ToInt32(Console.ReadLine());
        var res = 1;
        for (var i = fac; i >= 1; i--)
        {
            res = res * i;
        }
        Console.WriteLine("Count of " + fac + " is : " + res);
    }
}

我想在结果中添加用户输入的输入 fac。这里我使用 Console.WriteLine("Count of " + fac + " is : " + res); 在我的控制台中显示输出。

我试过

Console.WriteLine("Count of {0} is : {1} ", fac, res);

有没有更好的方法来做这个或者这个就可以了..

另一个解决方案是使用 string interpolation:

Console.WriteLine($"Count of {fac} is : {res}");

Console.WriteLine("Count of {0} is : {1} ", fac, res); 是一个支持格式字符串的 overload of Console.WriteLine

如果您需要用值(例如 fac、res)填充字符串模板(例如 "Count of {0} is : {1} "),您还可以使用字符串插值 (.net 4.6) 或 String.Format method 重载,这也使得更容易用重复值填充模板(例如 String.Format("{0}-{1} {0}-{1} {2}", 1,2,3);

string s = String.Format("Count of {0} is : {1} ", fac, res);
Console.WriteLine(s);

我会避免使用加法运算符,因为它会导致意外的结果;例如

int a = 1;
int b = 2;
Console.WriteLine("hello world " + a + b);
//hello world 12
Console.WriteLine(a + b + " hello world");
//3 hello world

这两行看起来好像会产生相似的输出,只有一行以 hello world 开头,另一行以 hello world 结尾。但是,字符串的数字部分在第一个示例中为 12 ("1" + "2"),而在第二个示例中为 3 (1 + 2).

最好,因为它非常清晰可读。 您还可以使用此技术应用格式;即

Console.WriteLine("hello world {a:0.00} {b}");
//hello world 1.00 2

注意:应用格式的选项也可用于数字占位符:

Console.WriteLine("hello world {0} {1:0.00}", a, b);
//hello world 1 2.00

如果您需要在定义变量之前定义格式,那么使用数字占位符而不是插值是有意义的。例如

public class MyClass 
{
    const string MyStringFormat = "hello {0} world {1}";    
    public static string WriteMessage(int a, int b)
    {
        Console.WriteLine(MyStringFormat, a, b);
    }
}