Tutte le risposte finora ce l'hanno praticamente.
Di recente come C ++, le lingue non avevano nemmeno un tipo "booleano". Se fosse stato necessario un tipo di questo tipo, è stato utilizzato un enum o un typedef int per rendere il tipo LOOK come un tipo. È stato solo quando è arrivata la prossima generazione di linguaggi web e orientati a Windows, come VB, Java e C #, che "bool" è stato ritenuto abbastanza importante da includere come tipo "incorporato".
Quale potrebbe essere il terzo valore del valore "trileno" è molto dipendente dal contesto. "True" e "False" sono molto generali e possono essere facilmente tradotti nella mente del programmatore in "sì" e "no" o semplicemente "on" e "off". I programmatori la pensano così; devono, perché è così che pensa il computer. Sotto tutti gli strati di astrazione ci sono miliardi e miliardi di cifre binarie, che sono rappresentati dalla continuità dei circuiti microscopici nella CPU e altro hardware; acceso o spento, non intermedio.
L'aggiunta di questa terza ruota confonde le cose. Qual è il terzo valore? Nullo? Non specificato? Sconosciuto? Altro (e cos'altro potrebbe esserci in uno spazio di risposta con "on" e "off")? Questo terzo valore diventa MOLTO dipendente dal contesto e per questo motivo i "trileani" non sono integrati.
Proprio come i semplici booleani prima che fossero integrati, puoi sempre creare i tipi che ti servono praticamente in qualsiasi linguaggio strongmente tipizzato. Un "trilean" verrebbe creato usando un Enum con "true", "false" e qualunque sia il tuo terzo valore. In .NET, è possibile utilizzare un valore null bool, dove null sarebbe il terzo "valore". Oppure, ci sono diversi tipi "a tre stati" enumerati nelle librerie Framework; DataGridViewTriState è grande e i suoi valori sono semplicemente True, False e NotSet che funzionano in un numero elevato di casi.