本文迁移自Panda666原博客,原发布时间:2021年4月17日。

在英文中,$符号表示美元符号(United States dollar)。这也是很多人喜欢的东西。甚至是一生最求的东西。但在编程语言中他只是一个符号。

在PHP中,$符号用于定义变量。比如:

$website = "www.Panda666.com";

在jQuery中,$就是jQuery的别称,是jQuery库提供的一个回传函数,比如:

var ul = $('ul');

在C#中,在第6.0版出现的一个新特性,称作:string interpolation。它有什么好处呢?我们来看几个案例就明白了。通常我们拼接字符串可能这样:

string name = "Panda";
string website = "www.panda.com";
string result = "Name=" + name + " Website=" + website;
Console.WriteLine(result);
//输出:Name=Panda Website=www.panda.com

拼接字符串实在太麻烦了,尤其是混合单双引号的情况下。这段代码优化后可能会是这样:

string name = "Panda";
string website = "www.panda.com";
string result = String.Format("Name={0} Website={1}", name, website);
Console.WriteLine(result);
//输出:Name=Panda Website=www.panda.com

欸,看起来有点C语言的味道了,只不过用的是占位符。这种方式已经不错了,但在参数特别多的情况下,还是非常麻烦,另外如果要和表达式结合在一起使用会更加麻烦。为此C#更新版本后,出了一个string interpolation 的语法糖。怎么用呢,让我们把上面的例子再简化一下你就明白了。

string name = "Panda";
string website = "www.panda.com";
string result = $"Name={name} Website={website}";
Console.WriteLine(result);
//输出:Name=Panda Website=www.panda.com

可以看到只修改了result变量定义和实例化这一行。在字符串的起始位置加了一个$符号,然后把变量放在原先占位符的位置就可以了。这样有什么好处?当你在定义一大串的字符串内嵌很多变量的时候,不仅仅是美观,而且日后的维护也非常的方便。并且如果和LINQ结合使用会更加的方便。比如下面这个例子:

//定义测试使用的数据
var testData = new[]{
new {Name="Panda",Website="Panda666.com" },
new {Name="Dog",Website="222dog.com"}
}; //直接在LINQ中使用(注意:需要引入System.Linq命名空间哟)
var doMagic2 = from item in testData
select $"Name={item.Name.ToUpper()} Website={item.Website.Trim()}";
//测试输出的结果
foreach (string item in doMagic2){
Console.WriteLine(item);
//输出:
//Name=PANDA Website=Panda666.com
//Name=DOG Website=222dog.com
}

看到这里可能会有小伙伴会问了,那我想格式化参数怎么办,之前可以直接在占位符后面设置格式化的参数,现在怎么办。实际上,现在也没有变化,仍然在“占位符”后加格式化参数即可。可以看这个例子:

Console.WriteLine($"{DateTime.Now:f}");
//2021年4月17日 15:13
Console.WriteLine($"{666666.67D:c}");
//¥666,666.67

string interpolation 大概就是这样。欢迎小伙伴们一起交流学习。可以在下方留言哟。

C#中的String Interpolation的更多相关文章

  1. JavaScript中的string interpolation

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals var a = 5; var b ...

  2. C# 6.0:String Interpolation

    在开发中经常需要对字符串进行格式化处理.我们一般使用String.Format()方法,它会将指定字符串中的每个格式项替换为相应对象的值的文本等效项.虽然这很普通,但有时会容易使人迷惑并造成错误.因为 ...

  3. java中的String

    String作为java最常用的类,被广大程序员们蹂躏已久,让我们又爱又恨,应该如何正确的使用它呢,老姜带你一起来揭开它神秘的面纱. 一.String类定义时被冠上了final的标识符,决定了它终生不 ...

  4. 再解java中的String

    今天看到一篇文章中,写了关于java中的String.我看了后,是我从学java来觉得是最好的一篇关于String类的文章.看了这篇文章你就会对String的认识会提高一个层次.故将原作者的文章特意转 ...

  5. 标准C++中的string类的用法总结

    标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...

  6. 探秘Java中的String、StringBuilder以及StringBuffer

    探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问 到的地方,今天就来和大家一起学习 ...

  7. php示例代码之类似于C#中的String.Format方法

    php示例代码之类似于C#中的String.Format方法 原文来自于  http://stackoverflow.com/questions/1241177/c-string-format-equ ...

  8. (转)Java中的String为什么是不可变的

    转自:http://www.importnew.com/7440.html String是所有语言中最常用的一个类.我们知道在Java中,String是不可变的.final的.Java在运行时也保存了 ...

  9. 关于JAVA中的String的使用与连接(转)

    JAVA中的String连接性能 Java中的String是一个非常特殊的类,使它特殊的一个主要原因是:String是不可变的(immutable).           String的不可变性是Ja ...

随机推荐

  1. python---运算符和编码

    格式化输出 在输出数据时,会有用户需要输入的信息被输出,没办法预先知道,这就需要使用格式化输出.先在相应位置放置一个占位符,再把字符串里的占位符与外部的变量做个映射关系. name = input(& ...

  2. 携程apollo配置中心服务端如何感知配置更新?

    引言 前面有写过一篇<分布式配置中心apollo是如何实时感知配置被修改>,也就是客户端client是如何知道配置被修改了,有不少读者私信我你既然说了client端是如何感知的,那服务端又 ...

  3. 基于 Apache Hudi 构建增量和无限回放事件流的 OLAP 平台

    1. 摘要 在本博客中,我们将讨论在构建流数据平台时如何利用 Hudi 的两个最令人难以置信的能力. 增量消费--每 30 分钟处理一次数据,并在我们的组织内构建每小时级别的OLAP平台 事件流的无限 ...

  4. uniapp报错:Browserslist: caniuse-lite is outdated. Please run next command `npm update`

    uni-app的编译器是基于npm的,依赖了众多包括mpvue.webpack在内的npm库,这些库又引用了一个三方库caniuser-lite.caniuser-lite这个库的代码里有个浏览器兼容 ...

  5. 推荐一个我写的Python库——PyNAS

    介绍 PyNAS是一个以Python的Updog的库为基础,制作而来的库 安装 pip安装(推荐) pip install PyNAS 源码安装(推荐) Github: git clone https ...

  6. 2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机)

    2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机) https://www.luogu.com.cn/problem/P2292 题意: 标点符号的出现晚于文字的出 ...

  7. nodejs mysql pool 只能插入10条记录或者较少记录

    BEGIN; 解决方案:从连接池获取到的Connection,执行完操作后,必须及时关闭! 即:connection.end(); 使用后发现console有打印出警告信息,大致意思为 end() 方 ...

  8. vue package.json 详解

    示例: { "name": "scrm", "version": "0.1.0", "private" ...

  9. 论文解读(IGSD)《Iterative Graph Self-Distillation》

    论文信息 论文标题:Iterative Graph Self-Distillation论文作者:Hanlin Zhang, Shuai Lin, Weiyang Liu, Pan Zhou, Jian ...

  10. 注解,lombok

    使用注解开发 UserMapper public interface UserMapper { @Select("select * from db4.user") List< ...