前言

编写代码时,我们常常需要组合字符串。如下代码:

string scheme = "https";
string host = "xxx.com";
int port = 8080;Console.WriteLine(string.Format("{0}://{1}:{2}", scheme, host, port));

但是,这种替换方式容易会产生错误,比如写错参数顺序,索引数字无效等。

因此,推荐的写法是使用字符串内插,代码如下:

Console.WriteLine($"{scheme}://{host}:{port}");

这样更容易阅读,而变量的值会被直接替换到字符串中。

常量内插字符串

当所有字符串都是常量时,在.NET 6之前,是不能使用字符串内插的,只是使用+拼接字符串:

而在.NET 6,我们已经可以对常量使用内插字符串,代码如下:

const string FirstName = "My";
const string LastName = "IO";const string FullName = $"{FirstName} {LastName}";

需要注意的是,内插字符串中的常量不能是数字:

这是因为,数字常量转换为字符串是有区域性区分的,而区域性只有在运行时才能获得:

Console.WriteLine($"{1234.56}"); // output: 1234.56Thread.CurrentThread.CurrentCulture= new CultureInfo("es-ES");
Console.WriteLine($"{1234.56}"); // output: 1234,56

结论

对于Attribute使用参数时,常量内插字符串将非常方便,如下代码:

public class xxClass
{[Obsolete($"Use {nameof(NewMethod)} instead")]public void OldMethod() { }public void NewMethod() { }
}

这样,我们可以不用在Message中硬编码方法名称了。

如果你觉得这篇文章对你有所启发,请帮忙点个或者在看

.NET 6新特性试用 | 常量内插字符串相关推荐

  1. .NET 6新特性试用 | 总结:我最喜欢的5个特性

    前言 不知不觉,<.NET 6新特性试用>系列文章已经写了20多篇,而今天终于要告一段落了. 如果你还没有看过,详细文章列表在这里: .NET 6新特性试用系列 在这么多特性中,我最喜欢如 ...

  2. 5.0 新特性试用体验之 Clustered Index

    作者:hzc989 原文来源: https://tidb.net/blog/69dd056c [是否原创]是 [首发渠道]TiDB 社区 [目录] 一.引言 二.基础前情回顾 三.era withou ...

  3. .NET 6新特性试用 | 可空引用类型

    前言 在查看<隐式using指令>功能时,我们在csproj中发现这样一个属性: 那么,Nullable到底是干嘛的? 可为空上下文 严格来说,这不是新特性,而是C# 8.0引入的特性之一 ...

  4. C++11新特性探索:原始字符串字面值(raw string literal)

    原始字符串字面值(raw string literal)是C++11引入的新特性. 原始字符串简单来说,"原生的.不加处理的",字符表示的就是自己(所见即所得),引号.斜杠无需 & ...

  5. .NET 6新特性试用 | ArgumentNullException卫语句

    前言 在前面的文章中(<可空引用类型>),我们介绍过编译器会帮我们检查空引用,但是仅仅是警告.最好的方式还是在运行时用卫语句进行检查: private void Test(WeatherF ...

  6. .NET 6新特性试用 | PeriodicTimer

    前言 在.NET中,已经存在了5个Timer类: System.Threading.Timer System.Timers.Timer System.Web.UI.Timer System.Windo ...

  7. .NET 6新特性试用 | 可写JSON DOM API

    前言 我们常用JSON的方式,是将类对象序列化/反序列化: var user = new User { Name = "My IO" }; var json = JsonSeria ...

  8. .NET 6新特性试用 | SDK工作负载

    前言 为了应对.NET SDK能够支持的程序集项目(例如iOS.Android.WASM)的不断增长,从.NET 6开始,允许用户仅安装必要的SDK(例如ASP.NET Core),而不是一次性安装& ...

  9. .NET 6新特性试用 | 自动生成高性能日志记录代码

    前言 要想记录日志,常用的方式是访问ILogger实例提供的日志记录方法: private readonly ILogger<WeatherForecastController> _log ...

最新文章

  1. 6 redhat 查看rtc时间_修改linux系统时间、rtc时间以及时间同步
  2. c#精彩编程200例百度云_邂逅百度云智学院:福州理工学院AIOT实训营火热开营!...
  3. java数据结构系列——排列(2):有序阵列
  4. Gartner 容器报告:阿里云与 AWS 并列第一,领先微软、谷歌
  5. bbs与BLOG与SNS在区别
  6. c++函数可变参数的使用
  7. RESTful 使用规范及接口文档模板
  8. 维修频谱分析仪多少钱?简单告诉你,频谱分析仪维修实例报价
  9. Altium designer—各类USB封装大全
  10. Android虚拟机多开检测
  11. Linux 摄像头驱动
  12. 怎么注册免费苹果开发者账号?
  13. excel打不开html格式的文件,excel扩展名,教您解决Excel无法打开文件因为文件或文件扩展名无效...
  14. 产品隐私政策与使用条款
  15. 安全认证、准入控制、RBAC
  16. html5 video首次观看禁止快进,Video Speed Controller - 快进/后退/回看在线视频
  17. squirrelSql小松鼠数据库连接工具的安装以及连接informix(系列3,squirrelSql作为客户端连接)
  18. 【英文语法】英语是世界上最容易的语言(语法汇总)
  19. 基于51单片机的光照强度检测c语言程序,基于51单片机光照强度检测报告.doc
  20. SpringAop动态代理的两种实现方式

热门文章

  1. paip.C#.NET JSON解析总结
  2. 18秋学期《计算机网络》在线作业,18秋北交《计算机应用基础及计算机网络与应用》在线作业一-2辅导资料.docx...
  3. spring 加载java类_在Spring中基于Java类进行配置的完整步骤
  4. 无法检查指定的位置是否位于cfs上_(干货分享)一文搞明白 节气门位置传感器的作用、故障类型与症状、诊断方法...
  5. 行内元素中去掉文字的上下间距,使得文字所在元素的高度同字体高度一致的方法...
  6. win7 32位 安装opencv-python后,运行时提示 from .cv2 import *: DLL load failed: 找不到指定的模块 的解决办法...
  7. 寻找kernel32.dll的地址
  8. Tabcontrol动态添加TabPage(获取或设置当前选项卡及其属性)
  9. JavaScript基础学习(七)—BOM
  10. 关于castle和Could not find the dialect in the configuration错误