gpt4 book ai didi

c# - 模式匹配优先于引用还是值相等?

转载 作者:行者123 更新时间:2023-11-30 12:21:51 24 4
gpt4 key购买 nike

我看到很多关于如何在 C#7 中使用模式匹配的示例。一切看起来都不错。但是,我有一个问题,我似乎无法找到答案。

假设您有以下表达式:

if (a is null)

我的问题是:在 C#7 中是否更喜欢使用模式匹配而不是引用或值相等?

所以不用写:

if (a == null)

或:

if (a.Equals(null))

或:

if (object.Equals(a, null))

我怀疑 a 为 null 生成类似于上一个表达式的内容。但一般来说,切换到模式匹配会更受欢迎吗?

如果我错了,请纠正我,这是一个主要基于意见的问题,但我似乎找不到支持这一点的明确答案。

最佳答案

考虑以下四个代码片段:

// 1
var x = "";
var y = x is null;

// 2
var x = "";
var y = x.Equals(null);

// 3
var x = "";
var y = object.Equals(x, null);

// 4
var x = "";
var y = x == null;

它们的 IL 分别是:

// 1
IL_0001: ldstr ""
IL_0006: stloc.0
IL_0007: ldnull
IL_0008: ldloc.0
IL_0009: call bool [mscorlib]System.Object::Equals(object, object)
IL_000e: stloc.1

// 2
IL_0001: ldstr ""
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: ldnull
IL_0009: call bool [mscorlib]System.Object::Equals(object, object)
IL_000e: stloc.1

// 3
IL_0001: ldstr ""
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: ldnull
IL_0009: call bool [mscorlib]System.Object::Equals(object, object)
IL_000e: stloc.1

// 4
IL_0001: ldstr ""
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: ldnull
IL_0009: ceq
IL_000b: stloc.1

如您所见,前三个结果几乎相同。 == 版本使用 ceq 而不是 .Equals()

我猜 ceq 更快,因此 x == null 是测试 null 的最快方法。除此之外,它成为一个首选风格的问题。

关于c# - 模式匹配优先于引用还是值相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43604476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com