c# - 为什么在 C# 中将结构与 NULL 进行比较是合法的?

标签 c# struct null

Possible Duplicate:
C# okay with comparing value types to null

考虑以下带有 TimeSpan 的代码,它是一个结构体:

// will not compile - illegal
TimeSpan ts = null;  

但是,以下代码确实可以编译并且是合法的,尽管表达式总是错误的:

if (ts == null)
    Console.WriteLine("this line will never be hit");

谁能告诉我为什么将结构设置为 NULL 是无效的,但可以将它与一个进行比较?

最佳答案

这仍然是合法的,因为您可以为 structs 重载 == 运算符。

struct AmNull {
    public static bool operator ==(AmNull a, object b) {
        return b == null;
    }

    public static bool operator !=(AmNull a, object b) {
        return b != null;
    }
}

...

Console.WriteLine(new AmNull() == null); // True

关于c# - 为什么在 C# 中将结构与 NULL 进行比较是合法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10081231/

相关文章:

c# - 意外的相等测试,Equals(a, a) 评估为 false

function - 结构拥有函数的 Rust 作用域规则

javascript - 通过 Emscripten 在 Javascript 中进行结构操作

java - 为什么静态对象作为参数传递给另一个类的构造函数时为 null

c# - 如何用颜色填充位图对象中的封闭区域

c# - 在我的 owin 授权提供程序中的 GrantResourceOwnerCredentials 中设置自定义主体后,HttpContext.Current.User.Identity.Name 为空

c - 在C中为结构成员指针分配内存

ios - TabBarController 返回 null

swift - 强制展开可选的优点是什么?

c# - Treeview空白显示C#