美元符号($"string")是做什么的?

本文关键字:quot 什么 符号 美元 string | 更新日期: 2023-09-27 18:15:19

我一直在看一本书中的一些c#练习,我遇到了一个难倒我的例子。直接从书中,输出行显示为:

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

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

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

美元符号($"string")是做什么的?

这是c# 6中名为Interpolated Strings的新特性。

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

有关此内容的详细信息,请查看MSDN。

现在,再多想一点。为什么这个特性很棒?

例如,您有一个类Point:

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

创建两个实例:

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})");

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

字符串插值

是Perl等语言很久以前就有的一个概念现在我们也将在c#中获得这种能力。在字符串插值中,我们只需在字符串前加上$(就像我们使用@表示逐字记录一样)字符串)。然后,我们简单地包围我们想要的表达式插入花括号(即{和}):

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

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

c#字符串插值是一种串接、格式化和操作字符串的方法。这个特性是在c# 6.0中引入的。使用字符串插值,我们可以使用对象和表达式作为字符串插值操作的一部分。

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

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

地点:

  • interpolateexpression -生成要格式化的结果的表达式
  • alignment -常量表达式,其值定义的字符串表示的最小字符数插值表达式的结果。如果为正,则字符串表示是右对齐的;
  • formatString -表达式结果类型支持的格式字符串。

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

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

阅读更多关于c#/。. NET Little Wonders: c# 6中的字符串插值