18

C#中trueandfalse 运算符的用途和作用是什么?关于这些的官方文档是无可救药的非解释性的。

4

6 回答 6

13

如果您要定义一个专门的布尔值,您将重载trueor运算符。false然而,这通常不是必需的,这就是为什么它们似乎没有用。例如,在一个模糊逻辑布尔类中,你可能有这样的东西:

// Represents a boolean that can store truth values in a range from [0, 1], with
//   a value of one indicating complete metaphysical certitude and a value of
//   zero indicating complete impossibility.
public class FuzzyBoolean {
// ...
   public static bool operator true(FuzzyBoolean fb) {
      return fb.TruthValue > 0;
   }

   public static bool operator false(FuzzyBoolean fb) {
      return fb.TruthValue == 0;
   }
// ...
}

请注意,如果您重载true,则还必须重载false(反之亦然)。

当然,还有truefalse literals,您可以将这两个文字值分配给布尔实例。不要将这些与上面提到的运算符混淆。此处的 MSDN 文档中提供了一个更重要的示例,说明如何使用它,涉及数据库中的布尔值。

于 2009-03-26T16:12:03.587 回答
13

可以重载 true 和 false 运算符,以允许类将其自己的状态表示为 true 或 false,例如:

public class MyClass
{
    //...
    public static bool operator true(MyClass op)
    {
        // Evaluation code...
    }

    public static bool operator false(MyClass op)
    {
        // Evaluation code...
    }
}

您将能够在布尔表达式中使用运算符:

MyClass test = new MyClass(4, 3);
if (test)
    Console.WriteLine("Something true");
else
    Console.WriteLine("Something false");

string text = test ? "Returned true" : "Returned false";
于 2009-03-26T16:19:27.250 回答
4

请参阅文章中的参考示例

C#语言规范——数据库布尔类型

本质上,这些运算符允许在布尔条件逻辑中使用类型的实例,例如&&and ||

于 2009-03-26T16:10:36.103 回答
2

它们允许您使用运算符重载语法重载它们,以便您定义的类型可以解释为布尔值。

于 2009-03-26T16:10:48.690 回答
2

在 C# 2.0 之前,true 和 false 运算符用于创建与 SqlBool 等类型兼容的用户定义的可为空值类型。但是,该语言现在提供了对可空值类型的内置支持,并且您应该尽可能使用它们,而不是重载 true 和 false 运算符。有关更多信息。对于可为空的布尔值,表达式 a != b 不一定等于 !(a == b),因为其中一个或两个值可能为空。您需要分别重载 true 和 false 运算符以正确识别表达式中的空值。以下示例显示如何重载和使用 true 和 false 运算符。

于 2012-05-17T06:52:04.947 回答
0

允许您使用自定义类型作为逻辑操作的一部分;例如,作为 if 或 while 语句的一部分。

于 2009-03-26T16:12:01.327 回答