相关疑难解决方法(0)

好奇的null-coalescing运算符自定义隐式转换行为

注意:这似乎已在Roslyn中修复

写我的回答时,此问题出现了这一个,其中谈到了的关联性空合并运算符.

提醒一下,null-coalescing运算符的概念就是表单的表达式

x ?? y
Run Code Online (Sandbox Code Playgroud)

首先评估x,然后:

  • 如果值为xnull,y则进行求值,这是表达式的最终结果
  • 如果值x是非空,y则不评估,的值x是表达的最终结果,转换到编译时间类型的后y如果需要的话

现在通常不需要转换,或者它只是从可空类型到非可空类型 - 通常类型相同,或者只是从(比如说)int?到int.但是,您可以创建自己的隐式转换运算符,并在必要时使用它们.

对于简单的情况x ?? y,我没有看到任何奇怪的行为.但是,(x ?? y) ?? z我看到一些令人困惑的行为.

这是一个简短但完整的测试程序 - 结果在评论中:

using System;

public struct A
{
    public static implicit operator B(A input)
    {
        Console.WriteLine("A to B");
        return new B();
    }

    public static implicit operator …
Run Code Online (Sandbox Code Playgroud)

c# null-coalescing-operator

535
推荐指数
5
解决办法
2万
查看次数

标签 统计

c# ×1

null-coalescing-operator ×1