Как уже отмечали другие, компилятор ничего не знает о семантике Min или Max, что позволило бы ему нарушить правило, что аргументы оцениваются до вызова метода.
Если вы хотите написать свойсобственно, вы могли бы сделать это достаточно легко:
static bool LazyLessThan(int x, int y, Func<int> z)
{
return x < y || x < z();
}
и затем назвать его
if (LazyLessThan(x, y, z))
или
if (LazyLessThan(x, y, ()=>z()))
Или в этом отношении:
static bool LazyRelation<T>(T x, T y, Func<T> z, Func<T, T, bool> relation)
{
return relation(x, y) || relation(x, z());
}
...
if (LazyRelation(x, y, ()=>z, (a,b)=> a < b)))