本文迁移自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. 攻防世界——stegano

    分析 1. 一个pdf,里边都是英文. 打开pdf "ctrl + F",检查flag 然活这里边直接告诉你,flag不在这里,一般都这么说了那就是真的不在了. 2. txt打开, ...

  2. python---100以内所有素数

    def get_primes(): """ 100以内的所有素数:每个数都对从2到其本身前一个数做整除, 遇到能整除就换下一个数. 如果从2到去本身前一个数都没有整除,则 ...

  3. 2021.07.02 UVa1197 多路归并模板

    2021.07.02 UVa1197 多路归并模板 UVA11997 K Smallest Sums - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 分析: 题解 UVA11997 ...

  4. HTML5的基本功能

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  5. 如何用C/C++实现去除字符串头和尾指定的字符

    编程时我们经常需要对字符串进行操作,其中有一项操作就是去除字符串的头(尾)指定的字符,比如空格.通常我们会使用封装好的库函数或者类函数的Trim方法来实现,如果自己动手写一个TrimHead和Trim ...

  6. 【论文笔记】A review of applications in federated learning(综述)

    A review of applications in federated learning Authors Li Li, Yuxi Fan, Mike Tse, Kuo-Yi Lin Keyword ...

  7. 绕过 Docker ,大规模杀死容器

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 作者 | Connor Brewster 译者 | Sambodhi 策划 | Tina 要让 ...

  8. 踩到一个关于分布式锁的非比寻常的BUG!

    你好呀,我是歪歪. 提到分布式锁,大家一般都会想到 Redis. 想到 Redis,一部分同学会说到 Redisson. 那么说到 Redisson,就不得不掰扯掰扯一下它的"看门狗&quo ...

  9. 面试官:RocketMQ是什么,它有什么特性与使用场景?

    哈喽!大家好,我是小奇,一位热爱分享的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 作为一名Java程序员,Roc ...

  10. Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析

    Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析 前言 上一篇文章Spring Ioc源码分析系列--Ioc源码入口分析已经介绍到Ioc容器 ...