¿Por qué no hay operadores de cortocircuito elevados en `bool?`?

Por qué nobool? soporte levantado&& y||? Podrían haber levantado latrue yfalse operadores que hubieran agregado indirectamente levantados&& y||.

Los operadores| y& ya están levantadas e implementan la @ correc Lógica de tres valores. Pero, por supuesto, no están en corto circuito como|| y&&.

La pregunta es por qué decidieron no levantar a esos operadores al crear la especificación. Entonces "Es así porque la especificación lo dice" no es una respuesta al "¿por qué?".

Al levantartrue yfalse así que esonull Es ningunotrue norfalse:

public static bool operator true(bool? x) 
{
    return x.HasValue && x.Value
}

public static bool operator false(bool? x) 
{
  return x.HasValue && !x.Value
}

Esto habría resultado en&& y|| se comportan igual que sus contrapartes sin cortocircuito. Excepto esofalse && anything ytrue || anything cortocircuitaría false ytr,ue no son constantes de tiempo de compilación en estos dos ejemplos).

Esto funcionaría de manera muy similar aDBBool ejemplo en MSDN.

No veo un comportamiento sorprendente o peligroso introducido al levantar estos operadores. ¿Me he perdido algo

He leído otra pregunta SO en esto, pero no encontré ninguna de las respuestas satisfactorias.

a respuesta de @Jeff Yates muestra una buena razón por la cual levantar eltrue/false operadores no es óptimo, no explica por qué levantar&& y|| directamente es malo. Dado que el levantamiento del operador es la magia del compilador que casos especialesNullable<T> no necesita seguir las reglas de sobrecarga para los tipos normales y, por lo tanto, podría ofrecer&&/|| sin levantartrue.

Respuestas a la pregunta(3)

Su respuesta a la pregunta