美元符号($"string")有什么作用?

我一直在看一本书中的一些c#练习,我偶然发现了一个难倒我的例子。直接从书中,输出行显示如下:

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

代码正常工作,double result显示如预期的那样。然而,不理解为什么$在字符串的前面,我决定删除它,现在代码输出的是数组{result}的名称而不是内容。不幸的是,这本书没有解释为什么会有$。

我一直在搜索VB 2015帮助和谷歌,关于字符串格式和Console.WriteLine重载方法。我看不出有什么能解释它为什么是这样的。任何建议都将不胜感激。

232676 次浏览

String Interpolation . 字符串插值操作的一部分。

字符串插值的语法以' $ '符号开始,表达式使用以下语法在括号{}中定义。

{<interpolatedExpression>[,<alignment>][:<formatString>]}

地点:

  • interpolatedExpression -产生要格式化的结果的表达式
  • 类的字符串表示形式中最小字符数的常量表达式 插值表达式的结果。如果是正数,则字符串 表示法是右对齐的;如果为负,则左对齐
  • formatString -表达式结果类型所支持的格式字符串。

下面的代码示例连接一个字符串,其中对象、author作为字符串插值的一部分。

string author = "Mohit";
string hello = $"Hello {author} !";
Console.WriteLine(hello);  // Hello Mohit !

阅读更多关于c# /。NET小奇迹:c# 6中的字符串插值

它是c# 6中的新特性,名为Interpolated Strings

最简单的理解方法是:插值字符串表达式通过表达式结果的将包含的表达式替换为ToString表示创建字符串。

要了解更多细节,请查看MSDN

现在,再想一下。为什么这个功能很棒?

例如,你有类Point:

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


public int Y { get; set; }
}

创建2个实例:

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.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. 您必须自己维护参数的数量和索引。如果参数和索引的数量不相同,它将生成一个运行时错误。

基于这些原因,我们应该使用新的特性:

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

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

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