在一个非常基本的问题中存在混淆: 我看过很多书,它们使用Console.WriteLine的方式为:
int i = 12;
Console.WriteLine("MyVariable value is {0}", i);
取代
int i = 12;
Console.WriteLine("MyVariable value is" + i);
它们之间有什么区别吗?
在一个非常基本的问题中存在混淆: 我看过很多书,它们使用Console.WriteLine的方式为:
int i = 12;
Console.WriteLine("MyVariable value is {0}", i);
取代
int i = 12;
Console.WriteLine("MyVariable value is" + i);
Console.WriteLine("MyVariable value is {0} and myothervar is {1}", i, j);
string.Format
格式化调试日志条目,这导致了巨大的性能损失。幸运的是,在QA负载测试期间发现了这个问题。我认为牢记字符串操作确实会有代价是很重要的。 - Allon Guralnek也许这对未来的某个人有所帮助。现在有第三种方法(插值法),它是最干净的!它们都只是写同一件事的不同方式。
int i = 12;
// Interpolation Method- Req. C# 6 or later [Cleanest]
Console.WriteLine($"MyVariable value is {i}");
// Concatenation Method (from VB days)
Console.WriteLine("MyVariable value is " + i);
// Format Method (from C days)
Console.WriteLine("MyVariable value is {0}", i);
我相信你在初学者的书籍中看到了字符串拼接,因为它很简单。在这样的简单示例中使用字符串格式化需要进行解释。字符串拼接要简单得多,可能已经在书中的某个时候被教授过(即使没有,通过示例学习也足够简单)。
我可以理解C程序员第一次遇到格式语法时可能会感到困惑。当尝试将其扩展到两个变量时,他们可能认为需要编写如下代码:
int numA = 3;
int numB = 5;
Console.WriteLine("numA is {0} and numB is {0}", numA, numB);
我以为它会类似于C语言的printf
函数,其中{0}
相当于%d
:
printf("numA is %d and numB is %d", numA, numB);
他们当然会感到惊讶,如果varA
被打印两次。或者他们可能会因为不知道在尝试 Console.WriteLine
一个字符串时,%s
的等效物而感到沮丧。另一方面,字符串连接少有陷阱,并且初学者可以更容易地扩展它。当然,它更加混乱,但也更加强大,这种力量可能会在一本介绍C#的书籍中令人困惑,因为字符串格式语法可能变得相当复杂:
Console.WriteLine("numA is {0,17:$00.00####}", numA);