public static implicit operator bool(Foo foo) {
return (foo.PropA > 0);
}
据我所知,差异是,通过单独定义真实和错误,您可以拥有一个既是真实和错误的对象,又不是真实的,也不是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; }
有人可以给我一个以相反方式做有意义的情况吗?thanks
the文档说,超载
true
和
false
旨在支持(无效)数据库类型(是/否,y/n,0/1等)。
当然,您可以像任何操作员一样不一致地定义它们。您有责任退还明智的东西。编译器不需要两者或两者兼而有之。我不知道这些操作员存在。 这意味着您可以实施自我束缚悖论:
public class ThisClassIsFalse
{
public static bool operator true(ThisClassIsFalse statement)
{
return statement ? false : true;
}
public static bool operator false(ThisClassIsFalse statement)
{
return statement ? true : false;
}
}
现在我们知道了这个经典悖论的真正解决方案...stackoverflowException.
我已经看到人们超载了true
和false
超载,以便在Linq存在之前进行巧妙的事情,例如在.NET 2.0中构建表达式。
return Repository.FindAll(
(Where.Publisher.Name == name) &&
(Where.Publisher.City == city));
在系统上进行延长,True可以是任何非零值。 在其他情况下,它可能是任何积极的价值。 其他系统并不是真正的布尔值,并且允许布尔值第三个状态零或nill,这就是为什么您可能会超载真实和错误,而不是超载单个布尔运算符。