C#8.0新语法using declaration

我们在代码中经常使用using保障非托管资源的释放

static void Main(string[] args)
{
    using (var options = Parse(args))
    {
        if (options["verbose"]) { WriteLine("Logging..."); }
        ...
    } // options disposed here
}

using虽然释放数据非常有效,但是有的时候会带来过多的缩进,导致代码不好阅读。

using (var a = ...)
{
    //do something 1
    using (var a = ...)
    {
        //do something 2
        using (var a = ...)
        {
            //do something 3
        }
    }
}

在C# 8.0中引入了一个新的using语法,可以不用花括号,变量出了其生命周期自动释放。  该语法功能上有点类似于C++的scoped_ptr,不过也支持async模式下的自动dispose。

static void Main(string[] args)
{
    using var options = Parse(args);
    if (options["verbose"]) { WriteLine("Logging..."); }
} // options disposed here

在新语法的加持下,上面的代码就可以简化如下

using var a = ...;
//do something 1

using var b = ...;
//do something 2

using var c = ...;
//do something 3

看起来舒服多了有没有。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#的自定义语法糖的使用详解

    语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用.通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会. 对If...Where的封装--语法糖WhereIf(如果读者已经知晓,请自行跳过) 在做条件查询的时候,我们可能经常要写这样的代码: List<User> Query(User queryModel

  • C#基础语法:as 运算符使用实例

    as 运算符类似于强制转换操作.但是,如果无法进行转换,则 as 返回 null 而非引发异常. as 运算符只执行引用转换和装箱转换.as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用强制转换表达式来执行. expression as type 等效于(但只计算一次 expression) expression is type ? (type)expression : (type)null as 运算符用于在兼容的引用类型之间执行转换.例如: // cs_keyword_as.cs

  • C#语法新特性之元组实例详解

    1.元组(Tuple) 元组(Tuple)在4.0 的时候就有了,但元组也有些缺点,如: 1)Tuple 会影响代码的可读性,因为它的属性名都是:Item1,Item2.. . 2)Tuple 还不够轻量级,因为它是引用类型(Class),对于一个变量要使用一个类型,有点太没必要了. 源代码如下: // 摘要: // 提供用于创造元组对象的静态方法.若要浏览此类型的.NET Framework 源代码,请参阅 Reference Source. public static class Tuple

  • C#的十种语法糖介绍

    目录 语法糖 一.自动属性 二.隐式类型(var) 三.参数默认值和命名参数 四.对象初始化器和集合初始化器 五.匿名类和匿名方法 匿名类型 匿名类型的嵌套 匿名类型的限制: 匿名方法 六.扩展方法 七.内置泛型委托 八.Lambda表达式 九.标准查询运算符 十.Linq 语法糖 指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用.通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会. 需要声明的是“语法糖”这个词绝非贬义词,它可以给我们带来方便,

  • 详解C#中检查null的语法糖

    目录 函数参数null检查 传统写法 ThrowIfNull C# 11的!!语法(已经取消) 有关null的一些操作 ?? ??= ?. ?[] 一些操作 结语 今天看到已经更新了devblogs,新增的C# 11的!!(用于检查null的语法)经过非常长的讨论,最后取消了.然后我又想起来null检查,这个可以说一说. 函数参数null检查 传统写法 写一个函数的时候,最经典的检查,估计也是大家最常使用的null检查,应该是这样的吧: public static void GetV1(stri

  • C#基础语法:Base关键字学习笔记

    它与this关键字一样,都是作为类的实例(因此不能调用基类的静态成员和抽象成员)简写或者替代而存在的,只不过this关键字用于替代本类的实例,base关键字用于替代基类的实例,用法很简单,其访问基类的形式如下: base.[标识符] base[[表达式列表]]      这个类型的一看便可以大概猜测多用于基类实例的索引器操作,在我下面演示的代码中你会看到它的用法. 对于  base.[标识符]的访问形式再次说明一下: 对于非虚方法,这种访问仅仅是对基类实例成员的直接访问,完全等价于((base)

  • 利用C#9.0新语法如何提升if语句美感

    前言 C# 语言一贯秉承简洁优美的宗旨,每次升级都会带来一些语法糖,让我们可以使代码变得更简洁.本文分享两个使用 C# 9.0 提升 if 语句美感的技巧示例. 使用属性模式代替 IsNullOrEmpty 在任何你使用 IsNullOrEmpty 的时候,可以考虑这样替换: string? hello = "hello world"; hello = null; // 旧的方式 if (!string.IsNullOrEmpty(hello)) { Console.WriteLine

  • C# 6.0的属性(Property)的语法与初始值详解

    昨晚有学点新知识,是有关C# 6.0的. 在数据库创建有一张表: CREATE TABLE [dbo].[ToolLocation] ( [ToolLocation_nbr] SMALLINT IDENTITY(1,1) NOT NULL PRIMARY KEY, [LocationName] NVARCHAR(20) NOT NULL, [Description] NVARCHAR(50) NULL, [IsActive] BIT NOT NULL DEFAULT(1) ) GO Source

  • C#语法之泛型的多种应用

    本篇文章主要介绍泛型的应用. 泛型是.NET  work 2.0 版类库就已经提供的语法,主要用于提高代码的可重用性.类型安全性和效率. 泛型的定义 下面定义了一个普通类和一个泛型类,我们可以明确看到泛型类和普通类最大的区别就是多了一个<T>. 所以,这个<T>就标记了,这个类是泛型类.其中这个T,也可以写成A,B,C,D或其他字符. public class Generic { public String Name; } public class Generic<T>

  • C# using语法糖图文详解

    前言 什么是语法糖? (语法糖就是像糖一样的语法-) 语法糖(Syntactic sugar),又名糖衣语法,最早是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的. 通俗点来讲就是简化后的语法,但是其效果和原先语法是一样的,只是更方便我们程序员使用而已. 举个日常生活中简单的例子,使用语法糖之前你想表达今天天气很热:"今天气温好热啊!",用了语法糖后:"天热!", 但是效果是一样的,都能够给别人传达今天天气很热的信息. 很多语言都有语法糖

随机推荐