Imports System.Collections.Generic
Console.WriteLine("By Text:")
Console.WriteLine(BoolEnum.TrySelect("Is True", BoolEnum.[False]).ToString())
Console.WriteLine(BoolEnum.TrySelect("Is Yo", BoolEnum.[False]).ToString())
Console.WriteLine(BoolEnum.TrySelect("Is False", BoolEnum.[True]).ToString())
Console.WriteLine([String].Empty)
Console.WriteLine("By Integer:")
Console.WriteLine(BoolEnum.TrySelect(1, BoolEnum.[False]).ToString())
Console.WriteLine(BoolEnum.TrySelect(0, BoolEnum.[True]).ToString())
Console.WriteLine(BoolEnum.TrySelect(11, BoolEnum.[False]).ToString())
Console.WriteLine([String].Empty)
Console.WriteLine("By Boolean:")
Console.WriteLine(BoolEnum.TrySelect(True, BoolEnum.[False]).ToString())
Console.WriteLine(BoolEnum.TrySelect(False, BoolEnum.[True]).ToString())
Console.WriteLine([String].Empty)
Private Shared allValuesByNaturalValue As New Dictionary(Of Boolean, BoolEnum)()
Private Shared allValuesByTextValue As New Dictionary(Of String, BoolEnum)()
Private Shared allValuesByInteger As New Dictionary(Of Integer, BoolEnum)()
Private m_boolText As String
Private m_integerValue As Integer
Private m_naturalValue As Boolean
Public Shared ReadOnly [True] As New BoolEnum(True, "Is True", 1)
Public Shared ReadOnly [False] As New BoolEnum(False, "Is False", 0)
Private Sub New(naturalValue As Boolean, boolText As String, integerValue As Integer)
Me.m_naturalValue = naturalValue
Me.m_integerValue = integerValue
allValuesByNaturalValue.Add(naturalValue, Me)
allValuesByTextValue.Add(boolText, Me)
allValuesByInteger.Add(integerValue, Me)
Public Shared Function TrySelect(naturalValue As Boolean, defaultValue As BoolEnum) As BoolEnum
Dim returnValue As BoolEnum
If allValuesByNaturalValue.TryGetValue(naturalValue, returnValue) Then
Public Shared Function TrySelect(boolText As String, defaultValue As BoolEnum) As BoolEnum
Dim returnValue As BoolEnum
If allValuesByTextValue.TryGetValue(boolText, returnValue) Then
Public Shared Function TrySelect(integerValue As Integer, defaultValue As BoolEnum) As BoolEnum
Dim returnValue As BoolEnum
If allValuesByInteger.TryGetValue(integerValue, returnValue) Then
Public Shared Widening Operator CType(boolEnum As BoolEnum) As Boolean
Return If(boolEnum IsNot Nothing, boolEnum.naturalValue, False)
Public Shared Widening Operator CType(boolEnum As BoolEnum) As String
Return If(boolEnum IsNot Nothing, boolEnum.boolText, "Is False")
Public Shared Widening Operator CType(boolEnum As BoolEnum) As Integer
Return If(boolEnum IsNot Nothing, boolEnum.integerValue, 0)
Public ReadOnly Property NaturalValue() As Boolean
Public ReadOnly Property BoolText() As String
Public ReadOnly Property IntegerValue() As Integer
Public Shared ReadOnly Property AllValues() As IReadOnlyCollection(Of BoolEnum)
Return allValuesByNaturalValue.Values.ToList().AsReadOnly()
Public Shared ReadOnly Property AllBooleanValues() As IReadOnlyCollection(Of Boolean)
Return allValuesByNaturalValue.Keys.ToList().AsReadOnly()
Public Shared ReadOnly Property AllTextValues() As IReadOnlyCollection(Of String)
Return allValuesByTextValue.Keys.ToList().AsReadOnly()
Public Shared ReadOnly Property AllIntegerValues() As IReadOnlyCollection(Of Integer)
Return allValuesByInteger.Keys.ToList().AsReadOnly()
Public Overrides Function ToString() As String
Return "[" + Me.m_naturalValue.ToString() + ", """ + Me.m_boolText.ToString() + """, " + Me.m_integerValue.ToString() + "]"