百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

C# 中的字符串插值(涵盖 C# 10 和 C# 11)

bigegpt 2024-10-12 05:20 9 浏览

摘要: 本教程探讨了 C# 中字符串插值从开始到最新增强功能的演变。本指南深入探讨了其功能,展示了其可读性、简洁性和灵活性。

如果您已经涉足 C# 一段时间,您可能已经遇到过“字符串插值”一词。这是使我们的编码生活更加丰富多彩的功能之一。

在本教程中,让我们深入了解这个宝石多年来是如何演变的,探索它的起源、演变和最新的增强功能。

一切开始的地方:字符串插值的起源

字符串插值是在 C# 6 中引入的,是一种更易读、更简洁的字符串格式化方式。

早在 C# 6 时代,字符串插值就盛大地进入了它。在此之前,我们一直坚持使用占位符,并希望我们不要将它们混淆。string.Format

还记得这样做吗?

string carModel = "Sedan";
string carBrand = "Maruti";
string carYear = "2020";
string formattedString = string.Format("The car model is: {0}, brand is: {1}, and it was manufactured in {2}", carModel, carBrand, carYear);

在这里,我们使用该方法来格式化我们的字符串。、 和 用作占位符,分别替换为 、 和 的值。string.Format{0}{1}{2}carModelcarBrandcarYear

这种方法的缺点是,随着变量数量的增加,跟踪哪个占位符对应于哪个变量变得更加困难,从而使代码的可读性降低。

但是有了字符串插值,感觉就像呼吸了一口新鲜空气:

string carModel = "Sedan";
string carBrand = "Maruti";
string carYear = "2020";
string formattedString = #34;The car model is: {carModel}, brand is: {carBrand}, and it was manufactured in {carYear}";

不再计算占位符,对吧?

使用插值字符串,我们现在可以直接将变量嵌入到字符串中。0

它的工作方式是,字符串之前表示它是一个插值字符串。因此,现在的代码更具可读性,而且无需将占位符与变量匹配,从而减少了出错的机会。$

旅程:从 C# 6 到 C# 12 的字符串插值的演变

C# 6:字符串插值简介

这是字符串插值的曙光。简单而优雅。

示例

string carBrand = "Maruti";
string message = #34;The car brand is {carBrand}";

C# 7 和 8:优化和可用性

虽然 C# 7 和 8 没有对字符串插值进行重大更改,但它对功能进行了微调,确保它与其他语言方面很好地融合在一起。

示例:将插值字符串与本地函数一起使用:

string GetCarDetails(string brand, int year)
{
    return #34;The car brand is {brand} and it was manufactured in {year}.";
}
string details = GetCarDetails("Maruti", 2020);

这种方法比使用占位符更直观,尤其是在处理多个变量时。

C# 9:性能改进

C# 9 增强了字符串插值的性能,这在构造大型字符串或性能关键型应用程序时特别有用。

示例

使用字符串插值构建大型字符串:

List<string> carBrands = new List<string> { "Ambassador", "Maruti", "Tata", "Mahindra" };
StringBuilder sb = new StringBuilder();

foreach (var brand in carBrands)
{
    sb.AppendLine(#34;Brand: {brand}, Founded in: {GetFoundationYear(brand)}");
}

string carHistory = sb.ToString();

int GetFoundationYear(string brand)
{
    // Sample logic to return a foundation year based on the brand
    return brand switch
    {
        "Ambassador" => 1948,
        "Maruti" => 1983,
        "Tata" => 1991,
        "Mahindra" => 1954,
        _ => 0,
    };
}

在此 C# 9 示例中,我们强调在循环中使用字符串插值来生成更大的字符串,并展示了使用插值构造字符串的性能改进。

C# 10:改进的插值字符串

这个版本改变了游戏规则。从直接嵌入变量到条件插值和格式说明符,它带来了很多好处。

1. 插值字符串处理程序

之前

string name = "Supro";
string age = "44";
string city = "Cloud9";
var message = string.Format("Hello {0}, aged {1}, from {2}!", name, age, city);

在这里,我们使用该方法来格式化我们的字符串。、 和 是分别替换为 、 和 值的占位符。随着变量数量的增加,管理起来变得繁琐,容易出错。string.Format{0}{1}{2}nameagecity

之后

string name = "Supro";
string age = "44";
string city = "Cloud9";
FormattableString message = #34;Hello {name}, aged {age}, from {city}!";

使用插值字符串,我们现在可以直接将变量嵌入到字符串中。这使代码更加简洁,并减少了占位符不匹配的可能性。

2. 条件插值

之前

bool isMorning = true;
string greeting = isMorning ? "Good morning" : "Good evening";
string name = "Bob";
var message = string.Format("Hello {0}, {1}!", name, greeting);

早些时候,我们使用三元条件运算符的组合来构造我们的消息。正如你所看到的,在复杂的条件和多个变量的情况下,这可能变得难以阅读。string.Format

之后

bool isMorning = true;
string name = "Bob";
var message = #34;Hello {name}, {(isMorning ? "Good morning" : null)}!";

在这个改进的版本中,我们现在可以有条件地直接包含插值字符串的部分。正如你所看到的,代码更具可读性,允许更灵活的字符串构造。

3. 格式说明符

之前

double cost = 100.50;
double tax = 10.05;
var price = string.Format("Total price: {0:C2}", cost + tax);

在这里,我们使用 和 的总和格式化为小数点后两位的货币。string.Formatcosttax

这种方法要求我们跟踪格式说明符及其相应的变量。

之后

double cost = 100.50;
double tax = 10.05;
var price = #34;Total price: {cost + tax:C2}";

通过改进的插值字符串,我们可以直接在插值字符串中应用格式说明符,使代码更加直观,并减少格式说明符不匹配的机会。:C2

C# 11:插值中的原始字符串文本和换行符

原始字符串文字

之前

var path = "C:\\Users\\John\\Documents";

字符串中的反斜杠需要用另一个反斜杠进行转义,这使得路径和正则表达式变得繁琐。

之后

var path = @"C:\Users\John\Documents"; 

C# 11 中引入的原始字符串文本允许我们编写字符串,而无需使用字符串前的符号转义特殊字符。@

插值中的新行

之前

string name = "Alice";
var message = #34;Hello\n{name}!";

为了在字符串中包含新行,我们必须使用转义序列。\n

之后

string name = "Alice";
var message = #34;Hello
{name}!";

如您所见,C# 11 现在允许我们直接在插值字符串中包含新行。这使代码更具可读性。

字符串插值的优点

插值字符串更具可读性,因为它们允许开发人员直接查看最终的字符串结构,并带有嵌入的表达式。
它们还减少了对额外占位符和函数调用的需求。

字符串插值还支持任何表达式类型,包括方法调用和算术运算。

结论

从 C# 6 中的引入到 C# 11 中的最新增强功能以及 C# 12 中的预期功能,字符串插值已被证明是 C# 中的一项非常宝贵的功能。

它不仅使字符串格式更具可读性和简洁性,而且还不断发展以解决性能问题并为开发人员提供更大的灵活性。

随着 C# 的不断发展,字符串插值必将得到更多的改进,巩固其作为该语言最受欢迎的功能之一的地位。

原文链接:String Interpolation in C# (Covers C# 10 and C# 11) | DotNetCurry

讨论

在你的开发生涯中,最经常使用的是哪种字符串插值方式,欢迎评论区留言讨论!

#自律学习计划##记录我的2024##头条创作挑战赛# #挑战30天在头条写日记#

相关推荐

Go语言泛型-泛型约束与实践(go1.7泛型)

来源:械说在Go语言中,Go泛型-泛型约束与实践部分主要探讨如何定义和使用泛型约束(Constraints),以及如何在实际开发中利用泛型进行更灵活的编程。以下是详细内容:一、什么是泛型约束?**泛型...

golang总结(golang实战教程)

基础部分Go语言有哪些优势?1简单易学:语法简洁,减少了代码的冗余。高效并发:内置强大的goroutine和channel,使并发编程更加高效且易于管理。内存管理:拥有自动垃圾回收机制,减少内...

Go 官宣:新版 Protobuf API(go pro版本)

原文作者:JoeTsai,DamienNeil和HerbieOng原文链接:https://blog.golang.org/a-new-go-api-for-protocol-buffer...

Golang开发的一些注意事项(一)(golang入门项目)

1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...

golang 托盘菜单应用及打开系统默认浏览器

之前看到一个应用,用go语言编写,说是某某程序的windows图形化客户端,体验一下发现只是一个托盘,然后托盘菜单的控制面板功能直接打开本地浏览器访问程序启动的webserver网页完成gui相关功...

golang标准库每日一库之 io/ioutil

一、核心函数概览函数作用描述替代方案(Go1.16+)ioutil.ReadFile(filename)一次性读取整个文件内容(返回[]byte)os.ReadFileioutil.WriteFi...

文件类型更改器——GoLang 中的 CLI 工具

我是如何为一项琐碎的工作任务创建一个简单的工具的,你也可以上周我开始玩GoLang,它是一种由Google制作的类C编译语言,非常轻量和快速,事实上它经常在Techempower的基准测...

Go (Golang) 中的 Channels 简介(golang channel长度和容量)

这篇文章重点介绍Channels(通道)在Go中的工作方式,以及如何在代码中使用它们。在Go中,Channels是一种编程结构,它允许我们在代码的不同部分之间移动数据,通常来自不同的goro...

Golang引入泛型:Go将Interface「」替换为“Any”

现在Go将拥有泛型:Go将Interface{}替换为“Any”,这是一个类型别名:typeany=interface{}这会引入了泛型作好准备,实际上,带有泛型的Go1.18Beta...

一文带你看懂Golang最新特性(golang2.0特性)

作者:腾讯PCG代码委员会经过十余年的迭代,Go语言逐渐成为云计算时代主流的编程语言。下到云计算基础设施,上到微服务,越来越多的流行产品使用Go语言编写。可见其影响力已经非常强大。一、Go语言发展历史...

Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移

以下文章来源于GoOfficialBlog,作者GoOfficialBlogIntroductionagollo是Apollo的Golang客户端Apollo(阿波罗)是携程框架部门研...

Golang使用grpc详解(golang gcc)

gRPC是Google开源的一种高性能、跨语言的远程过程调用(RPC)框架,它使用ProtocolBuffers作为序列化工具,支持多种编程语言,如C++,Java,Python,Go等。gR...

Etcd服务注册与发现封装实现--golang

服务注册register.gopackageregisterimport("fmt""time"etcd3"github.com/cor...

Golang:将日志以Json格式输出到Kafka

在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/...

如何从 PHP 过渡到 Golang?(php转golang)

我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...