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

时间:2015-10-01 02:32:27

标签: c#

我在书中经历了一些C#练习,然后我遇到了一个让我难过的例子。直接从书中,输出行显示为:

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

现在,我好像站着,代码正常,double result按预期显示。但是,不理解为什么$在字符串的前面,我决定删除它,现在代码输出数组{result}的名称而不是内容。不幸的是,这本书没有解释为什么$存在。

我一直在搜索VB 2015帮助和Google,关于字符串格式化和Console.WriteLine重载方法。我没有看到任何解释为什么它是什么的东西。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:313)

这是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. 您必须自己维护参数和索引的数量。
  2. 出于这些原因,我们应该使用新功能:

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

    编译器现在为您维护占位符,因此您不必担心索引正确的参数,因为您只需将其放在字符串中即可。

    如需完整帖子,请阅读this blog

答案 1 :(得分:45)

  

String Interpolation

     

是像Perl这样的语言已经存在了很长一段时间的概念   现在我们也可以在C#中获得这种能力。在String Interpolation中,我们   只需在字符串前加上一个$(就像我们使用@逐字逐句一样)   字符串)。然后,我们简单地包围我们想要的表达式   用大括号插入(即{和}):

它看起来很像String.Format()占位符,但它不是索引,而是大括号内的表达式。事实上,它看起来像String.Format()应该不足为奇,因为它实际上就是它 - 编译器在幕后对待像String.Format()这样的语法糖。

很重要的是,编译器现在为您维护占位符,因此您不必担心索引正确的参数,因为您只需将其放在字符串中即可。

详细了解C#/.NET Little Wonders: String Interpolation in C# 6