.NET 6新特性试用之常量内插字符串

目录
  • 前言:
  • 一、常量内插字符串
  • 结论:

前言:

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

如下代码:

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.56

Thread.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新特性试用之常量内插字符串的文章就介绍到这了,更多相关.NET 6常量内插字符串内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • .NET 6新特性试用之DateOnly和TimeOnly类型

    目录 前言: 举例 ​1.创建实例​ ​2.类型转换​ ​3.操作​ 结论: 前言: 在.NET 6之前,没有方法来直接表示没有时间的日期(比如生日)或者没有日期的一天中的时间(比如闹钟). 虽然我们可以使用DateTime类和TimeSpan类来代替,但是实际使用中会存在一些问题: var dateOnly = new DateTime(2021, 10, 1); //输出 2021/10/1 0:00:00 //问题:还是有时间,并不能代表0点出生 var timeOnly = new Ti

  • .NET 6新特性试用之Nuget包验证

    目录 前言: Demo 结论: 前言: 我们常常需要将.NET类库打包成Nuget包,以便多个项目公用. 一旦修改类库,​尽管代码可以运行​,并成功打包成新版本​,看起来一切正常​,​但是​你无法保证该更改是安全且兼容的. 而在.Net 6中,提供了包验证工具,帮助我们检测这一点. Demo 使用方式也非常简单,只需修改项目文件,加上​​EnablePackageValidation​​属性: <EnablePackageValidation>true</EnablePackageVal

  • .NET 6中使用DateOnly和TimeOnly类型

    在.NET 6(preview 4)中引入了两个期待已久的类型,将作为核心库的一部分.DateOnly和TimeOnly允许开发人员表示DateTime的日期或时间部分.这两个类型为值类型(struct type),可以在代码中独立处理日期或时间概念时使用,它们定义在System命名控件中,使用它们可以与数据库中允许表示相同类型数据的方式保持一致.具体来说,这些类型与SQL Server数据库中日期和时间类型可以很好的进行匹配. 注意:如果你要使用这两种类型,需要下载并安装.NET 6(prev

  • .Net 6中的PeriodTimer介绍

    .net 6中新增了一个异步计时器PeroidTimer,相对普通Timer的回调, 它的模型更简单. var       second = TimeSpan.FromSeconds(3);  using var timer  = new PeriodicTimer(second); while (await timer.WaitForNextTickAsync()) {     Console.WriteLine($"Tick {DateTime.Now}"); } 关于WaitFo

  • .NET 6新特性试用之常量内插字符串

    目录 前言: 一.常量内插字符串 结论: 前言: 编写代码时,我们常常需要组合字符串. 如下代码: string scheme = "https"; string host = "xxx.com"; int port = 8080; Console.WriteLine(string.Format("{0}://{1}:{2}", scheme, host, port)); 但是,这种替换方式容易会产生错误,比如写错参数顺序,索引数字无效等. 因此

  • .NET 6新特性试用之常量内插字符串

    目录 前言: 常量内插字符串 结论: 前言: 编写代码时,我们常常需要组合字符串. 如下代码: string scheme = "https"; string host = "xxx.com"; int port = 8080; Console.WriteLine(string.Format("{0}://{1}:{2}", scheme, host, port)); 但是,这种替换方式容易会产生错误,比如写错参数顺序,索引数字无效等. 因此,推

  • .NET 6新特性试用之TryGetNonEnumeratedCount 方法

    目录 前言: 一.举例 二.原理 结论: 前言: .NET 6新增了​​TryGetNonEnumeratedCount​​方法,计算可枚举类型的元素总数. LINQ不是已经有了​​Count​​方法吗,为什么还要画蛇添足呢? 下文来看看具体情况!!! 一.举例 尝试下列代码: var b = new B<int>(); Console.WriteLine($@"{b.Count()}"); var a = new A<int>(); Console.Write

  • .NET 6新特性试用之System.Text.Json功能改进

    目录 前言: Demo ​1.属性排序​ ​2.序列化通知​ 结论: 前言: ​​System.Text.Json​​作为.NET默认的JSON序列化和反序列化类库,让我们看看,在.NET 6中有哪些功能上的改进? Demo ​1.属性排序​ 在属性上声明​​JsonPropertyOrderAttribute​​来控制属性序列化的顺序,而以前,顺序是由反射顺序决定的,是不确定的. 示例代码如下: public class User {     public int Age { get; set

  • .NET 6新特性试用之DateOnly和TimeOnly类型

    目录 前言: 举例 ​1.创建实例​ ​2.类型转换​ ​3.操作​ 结论: 前言: 在.NET 6之前,没有方法来直接表示没有时间的日期(比如生日)或者没有日期的一天中的时间(比如闹钟). 虽然我们可以使用DateTime类和TimeSpan类来代替,但是实际使用中会存在一些问题: var dateOnly = new DateTime(2021, 10, 1); //输出 2021/10/1 0:00:00 //问题:还是有时间,并不能代表0点出生 var timeOnly = new Ti

  • .NET 6新特性试用之System.Text.Json功能改进

    目录 前言: Demo ​1.属性排序​ ​2.序列化通知​ 结论: 前言: ​​System.Text.Json​​作为.NET默认的JSON序列化和反序列化类库,让我们看看,在.NET 6中有哪些功能上的改进? Demo ​1.属性排序​ 在属性上声明​​JsonPropertyOrderAttribute​​来控制属性序列化的顺序,而以前,顺序是由反射顺序决定的,是不确定的. 示例代码如下: public class User {     public int Age { get; set

  • .NET 6新特性试用Timer类之PeriodicTimer 

    目录 前言: 一.Demo 结论: 前言: 在.NET中,已经存在了5个Timer类: System.Threading.Timer System.Timers.Timer System.Web.UI.Timer System.Windows.Forms.Timer System.Windows.Threading.DispatcherTimer 不管以前这样设计的原因,现在.NET 6又为我们增加了一个新Timer,​​PeriodicTimer​​. 这又是为什么呢? 一.Demo 与其他T

  • ECMAScript6的新特性箭头函数(Arrow Function)详细介绍

    箭头函数是ECMAScript 6最受关注的更新内容之一.它引入了一种用「箭头」(=>)来定义函数的新语法,它-它碉堡了~.箭头函数与传统的JavaScript函数主要区别在于以下几点:1.对 this 的关联.函数内置 this 的值,取决于箭头函数在哪儿定义,而非箭头函数执行的上下文环境.2.new 不可用.箭头函数不能使用 new 关键字来实例化对象,不然会报错.3.this 不可变.函数内置 this 不可变,在函数体内整个执行环境中为常量.4.没有arguments对象.更不能通过ar

随机推荐