我一直在阅读有关在 C# 中重载 true 和 false 的内容,我想我理解这与定义 bool 运算符之间的基本区别。我看到的例子是这样的:
public static bool operator true(Foo foo) {
return (foo.PropA > 0);
}
public static bool operator false(Foo foo) {
return (foo.PropA <= 0);
}
对我来说,这等同于说:
public static implicit operator bool(Foo foo) {
return (foo.PropA > 0);
}
据我所知,不同之处在于,通过分别定义 true 和 false,您可以拥有一个既是 true 又是 false,或者既不是 true 也不是 false 的对象:
public static bool operator true(Foo foo) { return true; }
public static bool operator false(Foo foo) { return true; }
//or
public static bool operator true(Foo foo) { return false; }
public static bool operator false(Foo foo) { return false; }
我确定这是允许的,但我想不出它是什么。对我来说,如果您希望一个对象能够转换为 true 或 false,那么单个 bool 运算符最有意义。
谁能给我一个换种方式有意义的场景?
谢谢
最佳答案
作为the docs例如,重载 true
和 false
旨在支持(可为空的)数据库类型(是/否、Y/N、0/1 等)。
当然,您可以不一致地定义它们,就像任何运算符一样。您有责任合理返回。编译器只要求两者都不要求或两者都不要求。
关于c# - 为什么要重载 true 和 false 而不是定义 bool 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671012/