在 C# 中使用 插值字符串
作者:DotNetCore实战 发布时间:2023-06-23 07:09:50
前言:
字符串插值是一种将 表达式 插入到字符串字面量中的一种技术,又称为变量替换,变量插值,变量展开 等等,它是一种用相应值替换字符串中的一个或者更多个占位符的处理过程。
字符串插值被很多编程语言所采用,比如说:Python
,Perl
,PHP
,Ruby,Java,Scala 等等, C# 是在第六个版本中引入的,这篇文章我们将会讨论如何在 C# 中使用 字符串插值。
1.字符串插值 的结构
从语言层面上来说,字符串插值就是一个包含插值表达式的string
,这个string
中的某一个插值最终都会被一个实际值所替代。
插值字符串是用 $ 开头的,此外 $ 和字符串字面量之间不能有任何空格,下面的语言展示了 插值表达式 的语法结构。
{<interpolationExpression>[,<alignment>][:<formatString>]}
注意方括号内的元素是可选的。interpolationExpression
元素表示生成结果或输出字符串的表达式。alignment
表示一个常量表达式,其值指定在计算表达式时必须包含在表达式结果的字符串表示形式中的最小字符数。如果值为正数,则字符串表示为右对齐;如果值为负数,则字符串表示为左对齐。formatString
顾名思义,表示一个格式字符串。
2.创建 字符串插值
当使用字符串插值时,必须首先在字符串之前插入一个 $ 字符,而不是单独为每一个元素单独格式化。
一个插值表达式必须包含在一个左大括号和一个右大括号内 ({})。下面的代码片段展示了如何使用字符串插值来将字符串替换为文本值。
var name = "Joydip";
Console.WriteLine($"Hello, {name}");
接下来考虑下面的代码段。
string productName = "Lenovo Legion Laptop";
int counter = 5;
string output = string.Format("Today, {0} has been sold {1} times.",
productName, counter);
当把代码运行起来后,output 内容输出如下:
Today, Lenovo Legion Laptop has been sold 5 times.
现在用 插值法 来改造一下,参考结果如下:
string productName = "Lenovo Legion Laptop";
int counter = 5;
string output = $"Today, {productName}, has been sold {counter} times.";
3.插值字符串必须在编译时就能确定
插值字符串看起来像是一个创建 字符串模板 的简单方式,但你必须要意识到,插值字符串在 C# 中仅仅是一个编译时语法糖而已,换句话说,你的插值字符串必须在编译时就是一个普通的字符串字面量。
4.插件字符串中使用特殊字符
接下来我们来学习下,如何在 插值字符串 中使用特殊字符,考虑下面的例子。
string productName = "Lenovo Legion Laptop";
double price = 1600.00;
Console.WriteLine($"The customer asked, \"What is the price of {productName}?\"");
Console.WriteLine($"The salesman replied saying that the price of {productName} is ${price}.");
正如你看到的,如果包含特殊字符,必须用 \ 进行转义,字符串插值允许我们插入一个 value
到字符串中,并还能控制最后生成的输出结果,从语言层面来说,字符串插值最后会变成String.Format
,相反,如果字符串插值是 IFormattable
或者 FormattableString
类型,那么编译器会调用 FormattableStringFactory.Create
方法。
理论上来说,字符串插值稍微降低了程序的性能,但 .NET 最近的几个版本已经做了很大的优化,同时 字符串插值 所带来的灵活性远超这个所谓的性能。
来源:https://mp.weixin.qq.com/s?__biz=MzU4Mjc4NzgyOQ==&mid=2247491101&idx=1&sn=8c490003c9d7f15f25e5b659531a29e3&utm_source=tuicool&utm_medium=referral
猜你喜欢
- 1.导入System.Runtime.InteropServices命名空间。2.API函数ShowWindow()能够控制人和窗体的现实状
- 本文实例讲述了Android编程实现系统重启与关机的方法。分享给大家供大家参考,具体如下:最近在做个东西,巧合碰到了sharedUserId
- 前言现如今几乎大多数Java应用,例如我们耳熟能详的tomcat, struts2, netty...等等数都数不过来的软件,要满足通用性,
- 在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小。这个该如何实现呢?通过读取文件&q
- 每一个app都会有一个”退出登陆”的功能,当点击退出之后需要将所有的Activity都finish掉,开始是想将栈中的所有Activity清
- 简介虽然java有自动化的GC,但是还会有内存泄露的情况。当然java中的内存泄露跟C++中的泄露不同。在C++中所有被分配的内存对象都需要
- 自定义控件在android中无处不见,自定义控件给了我们很大的方便。比如说,一个视图为imageview ,imagebutton ,tex
- QDownloadQDownload是基于Android平台实现的下载框架。API简洁易上手,只需5分钟即可实现一个多任务、多线程、断点下载
- Java * 要想了解Java * ,首先要了解什么叫做代理,熟悉设计模式的朋友一定知道在Gof总结的23种设计模式中,有
- 仅供学习交流,禁止商业用途。如侵害利益,联系必删!前言最近一位小伙伴钟爱二次元文化,于是找到半次元这个app,但是很快他就遇到了问题。一、案
- 本文实例为大家分享了Java实现递归计算n的阶乘的具体代码,供大家参考,具体内容如下问题描述利用递归的思想实现阶乘的计算,以 n!为例(一)
- Java 读取外部资源的方法详解在Java代码中经常有读取外部资源的要求:如配置文件等等,通常会把配置文件放在classpath下或者在we
- AOP是Spring中的面向切面的编程,这里简单感受一下如何在xml文件中配置一个切面。如上图所示,配置一个切面的主要思路有以下几个步骤。1
- import android.content.Context;import android.graphics.Canvas;import a
- MybatisPlus 给我们提供了更加强大的代码生成器MyBatisPlus 在3.0.3版本之前使用代码生成器因为存在默认依赖,所以不需
- 1 线程池的优势总体来说,线程池有如下的优势:(1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。(2)提高响应速度。
- 前言本文主要给大家介绍了关于Kotlin委托属性与区间的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。委托属性有
- 前言ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素实现了
- CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步,它能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。
- 概述 这是一个自定义色盘,根据点,直线和圆的几何学加上hsv颜色模型完成技术点几何:圆的标准方程式:(x-a)²