我更喜欢较短的变体。但有时== false
有助于使您的代码更短:
对于使用 C# 2.0 的项目中的实际场景,我认为只有一个很好的理由这样做:bool?
类型。三态bool?
很有用,并且很容易以这种方式检查其可能值之一。
实际上你不能使用(!IsGood)
if IsGood
is bool?
。但是写作(IsGood.HasValue && IsGood.Value)
比(IsGood == true)
.
玩这个示例以获得想法:
bool? value = true; // try false and null too
if (value == true)
{
Console.WriteLine("value is true");
}
else if (value == false)
{
Console.WriteLine("value is false");
}
else
{
Console.WriteLine("value is null");
}
还有一种情况我刚刚发现 whereif (!IsGood) { ... }
与if (IsGood == false) { ... }
. 但是这个是不现实的 ;) 运算符重载在这里可能会有所帮助 :) (以及运算符 true/false 表示在 C# 2.0 中不鼓励 AFAIK,因为它的预期目的是为用户定义的类型提供类似 bool? 的行为,现在您可以使用标准类型获得它!)
using System;
namespace BoolHack
{
class Program
{
public struct CrazyBool
{
private readonly bool value;
public CrazyBool(bool value)
{
this.value = value;
}
// Just to make nice init possible ;)
public static implicit operator CrazyBool(bool value)
{
return new CrazyBool(value);
}
public static bool operator==(CrazyBool crazyBool, bool value)
{
return crazyBool.value == value;
}
public static bool operator!=(CrazyBool crazyBool, bool value)
{
return crazyBool.value != value;
}
#region Twisted logic!
public static bool operator true(CrazyBool crazyBool)
{
return !crazyBool.value;
}
public static bool operator false(CrazyBool crazyBool)
{
return crazyBool.value;
}
#endregion Twisted logic!
}
static void Main()
{
CrazyBool IsGood = false;
if (IsGood)
{
if (IsGood == false)
{
Console.WriteLine("Now you should understand why those type is called CrazyBool!");
}
}
}
}
}
所以...请谨慎使用运算符重载:(