.net 与is运算符比较的可为null的值类型

mspsb9vt  于 2022-12-14  发布在  .NET
关注(0)|答案(2)|浏览(188)

我想知道,当使用可空值类型时,在C#中进行常规值比较和通过is-运算符进行值比较在技术上是否有任何区别。
给出以下示例:

decimal? value = null;

value < 0; // returns false

value is < 0; // returns false

考虑到这两个结果都是假的,我只是想知道这两个比较是否有任何技术差异。

gcuhipw9

gcuhipw91#

在这个上下文中,is操作符是模式匹配的一部分,这意味着它将检查运行时类型,然后执行<操作符。<将简单地进行值比较。
对于这类问题,一个好的应用程序是sharplab.io,它将显示代码的反编译版本,其中语法糖将显示为更简单的C#代码。

using System;
public class C {
    public void M() {
        decimal? value = null;
        Console.WriteLine(value < 0); // returns false
        Console.WriteLine(value is < 0); // returns false
    }
}

变成:

public class C
{
    public void M()
    {
        Nullable<decimal> num = null;
        Nullable<decimal> num2 = num;
        Console.WriteLine((num2.GetValueOrDefault() < default(decimal)) & num2.HasValue);
        Console.WriteLine(num.HasValue && num.GetValueOrDefault() < 0m);
    }
}

https://sharplab.io/#v2:D4AQTAjAsAUCDMACciDCiDetE+UkALIgLIAUAlJtrjQCYCmAxgJYC2AhgDYD8iAblwCu9RAF5EAO0GdOAbmo0cICAE5SAzsMQAeRAAZysxAHpjyAOwBnRADMul+gsXK1Grc2u6DR0xet3OBycAX1hgoA

8dtrkrch

8dtrkrch2#

is操作符用于检查对象的运行时类型是否与给定的类型兼容,因此这是一种类型比较。
常规值比较-比较相同类型的对象的值。
这是两种不同的含义和用法。

相关问题