В С# есть два странных оператора:
Если я понимаю это право, эти операторы могут использоваться в типах, которые я хочу использовать вместо булевского выражения, и где я не хочу предоставлять неявное преобразование в bool.
Скажем, у меня есть следующий класс:
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;
}
}
Поэтому я могу написать следующий код:
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)
Однако для всех приведенных выше примеров выполняется только истинный оператор. Итак, для чего нужен фальшивый оператор в С#?
Примечание. Дополнительные примеры можно найти здесь, здесь и здесь.