c# - 为什么要重载 true 和 false 而不是定义 bool 运算符?

标签 c# boolean overloading operator-keyword

我一直在阅读有关在 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例如,重载 truefalse 旨在支持(可为空的)数据库类型(是/否、Y/N、0/1 等)。

当然,您可以不一致地定义它们,就像任何运算符一样。您有责任合理返回。编译器只要求两者都不要求或两者都不要求。

关于c# - 为什么要重载 true 和 false 而不是定义 bool 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671012/

相关文章:

c# - xtraGrid gridControl 中的自定义 summerType

c++ - '无符号变量 : value' C++

r - NA 识别 boolean 运算符

c++ - C++20 可变参数函数中的多个概念约束参数包不接受第一个参数包中的参数

c# - 为什么换行符不起作用?

c# - 如何使用 CaSTLe ActiveRecord 在保存或更新期间自动填充字段

c# - SharpZipLib 库压缩一个文件夹与子文件夹具有高水平的压缩和高效的时间

C# if else、switch、bool

基于可选参数存在而不使用函数重载的 typescript 函数返回类型

c++ - 重载运算符 +。字符串类