C# C忽略空检查?

C# C忽略空检查?,c#,blazor,C#,Blazor,谁能向我解释blazor服务器中C逻辑的这种非理性的蹩脚之美 什么是club,它是否可能有一个非空安全的static==运算符重载?例如,以下情况可能发生,但已被破坏: bool == (Foo x, Foo y) => x.Id == y.Id; 因为它不认为X和/或Y可以为空,所以它被破坏了。使用club==null将调用此断开的运算符,从而导致NRE 检查的一个好方法是使用club is object而不是club!=null,因为is-object/is-null语法从不调用st

谁能向我解释blazor服务器中C逻辑的这种非理性的蹩脚之美

什么是club,它是否可能有一个非空安全的static==运算符重载?例如,以下情况可能发生,但已被破坏:

bool == (Foo x, Foo y) => x.Id == y.Id;

因为它不认为X和/或Y可以为空,所以它被破坏了。使用club==null将调用此断开的运算符,从而导致NRE

检查的一个好方法是使用club is object而不是club!=null,因为is-object/is-null语法从不调用static==运算符重载。

也许您应该将club与null进行如下比较:

if (!(club is null) && club.Id > 0)

我认为NullReferenceException是由==运算符引起的,它可以使用非空安全的方法。

要确保引用为空,可以使用:

ReferenceEquals(myObject, null)
它是来自对象类本身的静态方法,因此基本上可以在任何地方使用

大多数情况下,它会给您带来与以下相同的结果:

myObject == null
但是因为==可以重载,所以您可能会有奇怪的行为。
请参阅。

俱乐部还是创建者?@Sajid俱乐部。异常消息声称。不完整。我们希望看到完整的stacktrace和俱乐部的完整生命周期。而不是图片。它是实体框架核心实体。它是在我的OnInitializedAsync方法中初始化的。我认为这是因为异步。但我不明白为什么C跳过空校验?俱乐部是对象-没有帮助。@dmitry也检查创建者。调试器经常误导用户。