There are two weird operators in C#:
- the true operator
- the false operator
If I understand this right these operators can be used in types which I want to use instead of a boolean expression and where I don’t want to provide an implicit conversion to bool.
Let’s say I have a following class:
public class MyType { public readonly int Value; public MyType(int value) { Value = value; } public static bool operator true (MyType mt) { return mt.Value > 0; } public static bool operator false (MyType mt) { return mt.Value < 0; } }
So I can write the following code:
MyType mTrue = new MyType(100); MyType mFalse = new MyType(-100); MyType mDontKnow = new MyType(0); if (mTrue) { // Do something. } while (mFalse) { // Do something else. } do { // Another code comes here. } while (mDontKnow)
However for all the examples above only the true operator is executed. So what’s the false operator in C# good for?
You can use it to override the
&&and||operators.The
&&and||operators can’t be overridden, but if you override|,&,trueandfalsein exactly the right way the compiler will call|and&when you write||and&&.For example, look at this code (from http://ayende.com/blog/1574/nhibernate-criteria-api-operator-overloading – where I found out about this trick; archived version by @BiggsTRC):
This is obviously a side effect and not the way it’s intended to be used, but it is useful.