C#中true
和false
运算符的目的和效果是什么?这些official documentation无可救药地无法解释。
答案 0 :(得分:12)
如果您定义了一个专门的布尔值,您会重载true
或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
(反之亦然)。
当然,还有true
和false
文字,这两个文字值可以分配给布尔实例。不要将这些与上面提到的操作员混淆。在MSDN文档here中给出了一个更实际的例子,说明如何使用这个,在数据库中涉及布尔值。
答案 1 :(得分: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...
}
}
您将能够在布尔表达式中使用运算符:
MyClass test = new MyClass(4, 3);
if (test)
Console.WriteLine("Something true");
else
Console.WriteLine("Something false");
string text = test ? "Returned true" : "Returned false";
答案 2 :(得分:4)
答案 3 :(得分:2)
它们允许您使用运算符重载语法重载它们,以便您定义的类型可以解释为布尔值。
答案 4 :(得分:2)
在C#2.0之前,使用true和false运算符创建与SqlBool等类型兼容的用户定义的可空值类型。但是,该语言现在提供对可空值类型的内置支持,并且只要有可能,您应该使用它们而不是重载true和false运算符。有关更多信息。使用可空的布尔值,表达式a!= b不一定等于!(a == b),因为其中一个或两个值可能为空。您需要分别重载true和false运算符,以正确识别表达式中的空值。以下示例显示如何重载和使用true和false运算符。
答案 5 :(得分:0)
允许您使用自定义类型作为逻辑操作的一部分;例如,作为if或while语句的一部分。