C#中的真假运算符是什么?

Pro*_*ofK 14 c# operators

C#中运营商truefalse 运营商的目的和效果是什么?关于这些的官方文件是绝对无法解释的.

Joh*_*lla 12

如果要定义专门的布尔值,则会重载truefalse运算符.然而,这通常不是必需的,这就是为什么它们似乎没有用处.例如,在模糊逻辑布尔类中,您可能具有以下内容:

// 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;
   }
// ...
}
Run Code Online (Sandbox Code Playgroud)

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

当然,还有truefalse 文字,你可以分配给布尔实例的两个文字值.不要将这些与上面提到的操作员混淆.你会如何使用这一点,涉及布尔数据库中的一个较大幅度的例子,在MSDN文档中给出这里.


CMS*_*CMS 11

可以重载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...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

string text = test ? "Returned true" : "Returned false";
Run Code Online (Sandbox Code Playgroud)

  • @alex 此示例仅与 `operator true` 相关。如果您在“if”、“while”等内部使用上面的“MyClass”,或者使用“? :` 三元运算符。`operator false` 重要的唯一情况似乎是 `MyClass` 是否也以合适的方式重载了 `operator &`。所以你可以说`MyClass conj = GetMyClass1() & GetMyClass2();`。然后使用 `operator false` 你可以短路并说 `MyClass conj = GetMyClass1() && GetMyClass2();`,使用 `&&` 而不是 `&`。如果第一个操作数不是“false”,那只会评估第二个操作数。 (2认同)

Jar*_*Par 5

请参阅文章中引用的示例

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

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