zoukankan      html  css  js  c++  java
  • C#7:什么是丢弃物以及如何使用它们

    转载 http://www.devsanon.com/c/using-discards-feature-of-c-7

    假设您希望调用一个具有返回值并且也接受out变量的方法,但是您不希望使用将要返回的out变量的内容。
    到目前为止,我们正在创建一个虚拟变量,以后将不会使用它或将其丢弃
    使用C#7,您现在可以使用“ 丢弃”

    丢弃是局部变量,可以为它们分配一个值,并且该值无法读取(丢弃)。本质上,它们是“只写”变量。

    这些丢弃没有名称,而是用_(下划线)表示。

    因此,让我们来看下面的示例。
    假设我们有一个整数的ConcurrentQueue,我们希望从中出队某些东西,而实际上没有使用它。

    int outDummy;
    if(m_myQueue.TryDequeue(out outDummy))
    {
       //do something here
    }
    else
    {
       //do something else here
    }
    

    现在,使用C#7,我们可以利用丢弃。

    if(m_myQueue.TryDequeue(out _))
    {
       //do something here
    }
    else
    {
       //do something else here
    }
    

    并且已出列的值将不会也无法使用。

    例如下面的代码

    int x = 0;
    if(m_myQueue.TryDequeue(out _))
    {
       x = _;
    }
    

    将不会编译,也不会出现在IntelliSense中。

    但是请记住,由于_是上下文关键字,因此如果您使用名称_声明变量,则将使用该变量。

    int x = 0;
    int _;
    if(m_myQueue.TryDequeue(out _))
    {
       x = _;
    }
    

    在上面的代码中,将从队列中删除的值将分配给变量x,因为在上述情况下,下划线用作变量而不是丢弃。

    结论

    C#中的丢弃功能提供了一种忽略某些局部变量的方法,这是设计时的功能。
    在运行时,可能需要一个变量,并且编译器可能会为其生成一个名称。
    由于_关键字是上下文关键字,因此您需要设置代码策略,以避免使用名称_声明局部变量,以减少混淆。
    此功能与.NET平台的早期版本兼容,因为它不需要更改CLR。

  • 相关阅读:
    web集群和分布式服务以及消息补偿机制几种方案
    什么是幂等性
    Dubbo面试常见问题
    mysql 缓存机制
    mysql面试题
    在IDEA中用Gradle构建项目时使用lombok以依赖出现出错
    jdbcType与javaType的对应关系
    通用Mapper的使用
    Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分
    dubbo面试题
  • 原文地址:https://www.cnblogs.com/aeiiilowx/p/12073413.html
Copyright © 2011-2022 走看看