• 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。

  • 相关阅读:
    jQuery之元素操作及事件绑定
    JS中常遇到的浏览器兼容问题和解决方法
    九九乘法表
    全选复习
    css基本知识
    js数组
    Spark常见错误问题汇总
    被问懵逼的Kafka面试题
    被问懵逼的数仓面试
    Flink模拟项目: 订单支付实时监控
  • 原文地址:https://www.cnblogs.com/aeiiilowx/p/12073413.html
Copyright © 2020-2023  润新知