C#中的String Interpolation
本文迁移自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的更多相关文章
- JavaScript中的string interpolation
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals var a = 5; var b ...
- C# 6.0:String Interpolation
在开发中经常需要对字符串进行格式化处理.我们一般使用String.Format()方法,它会将指定字符串中的每个格式项替换为相应对象的值的文本等效项.虽然这很普通,但有时会容易使人迷惑并造成错误.因为 ...
- java中的String
String作为java最常用的类,被广大程序员们蹂躏已久,让我们又爱又恨,应该如何正确的使用它呢,老姜带你一起来揭开它神秘的面纱. 一.String类定义时被冠上了final的标识符,决定了它终生不 ...
- 再解java中的String
今天看到一篇文章中,写了关于java中的String.我看了后,是我从学java来觉得是最好的一篇关于String类的文章.看了这篇文章你就会对String的认识会提高一个层次.故将原作者的文章特意转 ...
- 标准C++中的string类的用法总结
标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...
- 探秘Java中的String、StringBuilder以及StringBuffer
探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问 到的地方,今天就来和大家一起学习 ...
- php示例代码之类似于C#中的String.Format方法
php示例代码之类似于C#中的String.Format方法 原文来自于 http://stackoverflow.com/questions/1241177/c-string-format-equ ...
- (转)Java中的String为什么是不可变的
转自:http://www.importnew.com/7440.html String是所有语言中最常用的一个类.我们知道在Java中,String是不可变的.final的.Java在运行时也保存了 ...
- 关于JAVA中的String的使用与连接(转)
JAVA中的String连接性能 Java中的String是一个非常特殊的类,使它特殊的一个主要原因是:String是不可变的(immutable). String的不可变性是Ja ...
随机推荐
- 论文解读(GRCCA)《 Graph Representation Learning via Contrasting Cluster Assignments》
论文信息 论文标题:Graph Representation Learning via Contrasting Cluster Assignments论文作者:Chun-Yang Zhang, Hon ...
- 输入一个字符串,内有数字和非数字字符。例如:a123x456 17960 302tab5876。将其中连续的数字作为一个整数,依次存放到一维数组a中,例如123放在a[0],456放在a[1]……统计共有多少个整数,并输出这些数。
题目内容:输入一个字符串,内有数字和非数字字符.例如:a123x456 17960 302tab5876.将其中连续的数字作为一个整数,依次存放到一维数组a中,例如123放在a[0],456放在a[1 ...
- 1. charles安装配置与抓包详解
Charles简介Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据.它允许一个开发 ...
- selenium模块获得js动态数据-17track为例
通过selenium模块驱动Chrome浏览器,获得js动态数据,以17track为例:通过运单号查询最新的物流信息 1 import re 2 from time import sleep 3 fr ...
- Arch Linux 安装简明流程
Arch Linux 安装简明流程 这是一篇为 GPT/EFI 引导 的电脑安装 Arch Linux(双系统)的中文简明流程,尽可能省略了可以省略的流程与文字以使得篇幅尽量短小,基本上基于 Arch ...
- python学习-Day18
目录 今日内容详细 模块 循环导入问题 判断文件类型 py文件可以被分为两种类型 内置变量 __ name __ 模块的查找顺序 验证先从内存空间中查找 验证再从内置模块中查找 验证sys.path ...
- “如何实现集中管理、灵活高效的CI/CD”研讨会报名即将截止
如何实现集中管理.灵活高效的CI/CD ZOOM中文在线研讨会将于 2022年3月29日,星期二,下午3:00-5:00, 也就是 明天 举行, 如果您还未注册,点击按钮,立即注册此次研讨会(注册即可 ...
- [STL] vector 可变数组
点击查看代码 #include<iostream> #include<vector> using namespace std; int main() { // 初始化 a 为 ...
- kubernetes源码学习-环境配置篇
下载源码 根据kubernetes github 方式可以 mkdir -p $GOPATH/src/k8s.io cd $GOPATH/src/k8s.io git clone https://gi ...
- Nginx代理websocket为什么要这样做?
Nginx反向代理websocket 示例: http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } s ...