关于C#:美元符号($”字符串”)是什么?


What's with the dollar sign ($“string”)

本问题已经有最佳答案,请猛点这里访问。

我在一本书中做了一些C练习,我跑过去举了个例子,让我很困惑。直接从书本开始,输出行显示如下:

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

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

我一直在搜索有关字符串格式和console.writeline重载方法的vb 2015帮助和google。我看不出任何能解释为什么它是什么的东西。任何建议都将不胜感激。


这是C 6中名为Interpolated Strings的新功能。

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

有关详细信息,请查看msdn。

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

例如,您有类Point

1
2
3
4
5
6
public class Point
{
    public int X { get; set; }

    public int Y { get; set; }
}

创建2个实例:

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

现在,您要将其输出到屏幕。通常使用的两种方法:

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

如您所见,像这样连接字符串会使代码难以读取并容易出错。您可以使用string.Format()使其更好:

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

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

    关于全文,请阅读本博客。


    String Interpolation

    is a concept that languages like Perl have had for quite a while, and
    now we’ll get this ability in C# as well. In String Interpolation, we
    simply prefix the string with a $ (much like we use the @ for verbatim
    strings). Then, we simply surround the expressions we want to
    interpolate with curly braces (i.e. { and }):

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

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

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