Чтобы сделать то, что вы хотите, вам нужно переопределить неявный оператор приведения:
public class MyObject
{
private int i;
public MyObject(int i)
{
this.i = i;
}
public static implicit operator bool(MyObject o)
{
return o.i % 2 == 0;
}
}
Приведенный выше пример оценивается как true, если поле i
четное:
MyObject o1 = new MyObject(1);
MyObject o2 = new MyObject(2);
if (o1)
{
Console.WriteLine("o1");
}
if (o2)
{
Console.WriteLine("o2");
}
Выходные данные выше o2
.
Однако, это немного ужасная реализация, так как это приводит к запутанному коду в том, что у вас есть конструкции, которые читаются как if (object)
, которые были бы незнакомы большинству читателей - if (object.IsValid)
делает намерение намного более ясным. 1014 *