Linq FirstOrDefault带有可空操作符

本文关键字:操作符 FirstOrDefault Linq | 更新日期: 2023-09-27 18:04:34

当使用Linq的FirstOrDefault与空操作符组合时,我得到了一个奇怪的行为。

这是测试用例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication43
{
    class Program
    {
        static void Main( string[] args )
        {
            var x = new List<Test>( );
            x.Add( new Test { x = 1 } );
            x.Add( new Test { x = 2 } );
            var c2 = x.FirstOrDefault( e => e.x == 3 ) ?? x.FirstOrDefault( e => e.x == 1 );

            var a = x.FirstOrDefault( e => e.x == 3 );
            var b = x.FirstOrDefault( e => e.x == 1 );
            var c1 = a ?? b;
        }
        class Test
        {
            public int x;
        }
    }
}

我希望c1和c2都有相同的值,但c2总是返回null,即使是可空操作符的右侧不是null。

有一个类似的问题,但与值类型(在本例中为doubles)有关

FirstOrDefault()无法与??操作符

在本例中,都是关于引用类型Test

Linq FirstOrDefault带有可空操作符

我曾遇到过可空类型的调试错误。当变量不为空时,调试器有时显示空。我相信当涉及到可空类型时,c#编译器会做一些转换和优化。调试器有时似乎无法跟踪。

使用控制台输出值

我做这个答案是因为你的代码应该正常工作(Servy已经证实了这一点)。