什么是美元符号($“string”)

我已经在一本书中跑过了一些C#练习,而且碰到了一个例子,这让我难住了。 直接从书中,输出行显示为:

Console.WriteLine($"\n\tYour result is {result}."); 

现在我好像站立,代码工作和double result如预期地显示。 但是,不明白为什么string前面有$,我决定删除它,现在代码输出数组{result}的名称而不是内容。 这本书不能解释为什么美元在那里,不幸的是。

我一直在淘金的VB 2015帮助和谷歌,关于string格式和Console.WriteLine重载方法。 我没有看到任何解释为什么它是什么。 任何意见,将不胜感激。

这是C#6中称为Interpolated Strings的新function。

理解它的最简单的方法是:插入的stringexpression式通过用包含expression式的结果的ToString表示replace包含的expression式来创buildstring。

有关更多详细信息,请参阅MSDN 。

现在想想更多一点。 为什么这个function很好?

比如你有class级Point

 public class Point { public int X { get; set; } public int Y { get; set; } } 

创build2个实例:

 var p1 = new Point { X = 5, Y = 10 }; var p2 = new Point {X = 7, Y = 3}; 

现在,你想输出到屏幕上。 你通常使用的两种方式:

 Console.WriteLine("The area of interest is bounded by (" + p1.X + "," + p1.Y + ") and (" + p2.X + "," + p2.Y + ")"); 

正如你所看到的,像这样连接string会使代码难以阅读并且容易出错。 你可以使用string.Format()使其更好:

 Console.WriteLine(string.Format("The area of interest is bounded by({0},{1}) and ({2},{3})", p1.X, p1.Y, p2.X, p2.Y)); 

这就产生了一个新问题:

  1. 你必须保持自己的参数和索引的数量。

出于这些原因,我们应该使用新function:

 Console.WriteLine($"The area of interest is bounded by ({p1.X},{p1.Y}) and ({p2.X},{p2.Y})"); 

编译器现在为你保留占位符,所以你不必担心索引正确的参数,因为你只是把它放在string中。

对于完整的文章,请阅读这个博客 。

string插值

是像Perl这样的语言已经有相当一段时间的概念,现在我们也将在C#中获得这种能力。 在string插值中,我们只需在string前添加一个$(就像我们对逐字string使用@一样)。 然后,我们用花括号(即{和})简单地包围要插入的expression式:

它看起来很像String.Format()占位符,而不是索引,它是大括号内的expression式本身。 实际上,它看起来像String.Format(),因为它实际上就是这样 – 编译器在后台对待像String.Format()这样的语法糖。

最重要的是,编译器现在为你保留占位符,所以你不必担心索引正确的参数,因为你只是把它放在string中。

阅读更多关于C#/。NET的小奇迹:C#6中的string插值

这种写法来自C#6 string插值