gpt4 book ai didi

c# - 模式匹配 equal null vs is null

转载 作者:太空狗 更新时间:2023-10-29 20:19:34 26 4
gpt4 key购买 nike

来自 Microsoft new-features-in-c-7-0:

public void PrintStars(object o)
{
if (o is null) return; // constant pattern "null"
if (!(o is int i)) return; // type pattern "int i"
WriteLine(new string('*', i));
}

of == nullo is null有什么区别?

最佳答案

o is null翻译成object.Equals(null, o) (你可以看到它 here )。

object.Equals代码 is written as :

public static bool Equals(Object objA, Object objB)
{
if (objA == objB)
{
return true;
}
if (objA == null || objB == null)
{
return false;
}
return objA.Equals(objB);
}

所以最后会有一个o == null (第一个 if )。注意 System.Object没有定义 operator== ,因此使用的是引用类型的引用相等性。

理论上,通过观察被调用的代码,可以认为o == null (使用 o 一个 System.Object )应该比 o is null 快(更少的操作)...但是谁知道呢? :-)

最终结果是,通过两条不同的路线,o is nullo == null (使用 oSystem.Object )返回相同的结果。

通过观察我们甚至可以看到 o == nullobject.ReferenceEquals(o, null)相同(与 o 一个 System.Object ):-)。

有趣的问题应该是,为什么 C# 编译器不翻译 x is nullobject.ReferenceEquals(x, null)。请注意,由于如何完成可空类型的装箱,它甚至可以用于:

int? a = null;
if (a is null) { /* */ }

对编译器的更改使此响应无效...如果您单击“此处”链接,您可以看到它

关于c# - 模式匹配 equal null vs is null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42814245/

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