Boolean Structure

Définition

Représente une valeur booléenne (true ou false).

public value class bool : IComparable, IComparable<bool>, IConvertible, IEquatable<bool>
public value class bool : IComparable, IConvertible
public value class bool : IComparable, IComparable<bool>, IEquatable<bool>
public struct Boolean : IComparable, IComparable<bool>, IConvertible, IEquatable<bool>
[System.Serializable]
public struct Boolean : IComparable, IConvertible
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public struct Boolean : IComparable, IComparable<bool>, IConvertible, IEquatable<bool>
public struct Boolean : IComparable, IComparable<bool>, IEquatable<bool>
type bool = struct
    interface IConvertible
[<System.Serializable>]
type bool = struct
    interface IConvertible
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type bool = struct
    interface IConvertible
type bool = struct
Public Structure Boolean
Implements IComparable, IComparable(Of Boolean), IConvertible, IEquatable(Of Boolean)
Public Structure Boolean
Implements IComparable, IConvertible
Public Structure Boolean
Implements IComparable, IComparable(Of Boolean), IEquatable(Of Boolean)
Héritage
Boolean
Attributs
Implémente

Remarques

Une Boolean instance peut avoir l’une des deux valeurs suivantes : true ou false .

La Boolean structure fournit des méthodes qui prennent en charge les tâches suivantes :

  • Conversion de valeurs booléennes en chaînes : ToString

  • Analyse des chaînes pour les convertir en valeurs booléennes : Parse et TryParse

  • Comparaison des valeurs : CompareTo et Equals

Les sections suivantes expliquent ces tâches et d’autres informations sur l’utilisation :

Mettre en forme les valeurs booléennes

La représentation sous forme de chaîne d’un Boolean est soit « true » pour une valeur, soit true « false » pour une false valeur. La représentation sous forme de chaîne d’une Boolean valeur est définie par les champs en lecture seule TrueString et FalseString .

Vous utilisez la ToString méthode pour convertir des valeurs booléennes en chaînes. La structure booléenne comprend deux ToString surcharges : la méthode sans paramètre ToString() et la ToString(IFormatProvider) méthode, qui comprend un paramètre qui contrôle la mise en forme. Toutefois, étant donné que ce paramètre est ignoré, les deux surcharges produisent des chaînes identiques. La ToString(IFormatProvider) méthode ne prend pas en charge la mise en forme dépendante de la culture.

L’exemple suivant illustre la mise en forme avec la ToString méthode. Notez que l’exemple utilise la fonctionnalité de mise en forme composite , de sorte que la ToString méthode est appelée implicitement.

using System;

public class Example
{
   public static void Main()
   {
      bool raining = false;
      bool busLate = true;

      Console.WriteLine("It is raining: {0}", raining);
      Console.WriteLine("The bus is late: {0}", busLate);
   }
}
// The example displays the following output:
//       It is raining: False
//       The bus is late: True
Module Example
   Public Sub Main()
      Dim raining As Boolean = False
      Dim busLate As Boolean = True

      Console.WriteLine("It is raining: {0}", raining)
      Console.WriteLine("The bus is late: {0}", busLate)
   End Sub
End Module
' The example displays the following output:
'       It is raining: False
'       The bus is late: True

Étant donné que la Boolean structure ne peut avoir que deux valeurs, il est facile d’ajouter une mise en forme personnalisée. Pour une mise en forme personnalisée simple dans laquelle d’autres littéraux de chaîne remplacent « true » et « false », vous pouvez utiliser toute fonctionnalité d’évaluation conditionnelle prise en charge par votre langage, telle que l' opérateur conditionnel en C# ou l' opérateur If dans Visual Basic. L’exemple suivant utilise cette technique pour mettre Boolean en forme les valeurs comme « Yes » et « no » plutôt que « true » et « false ».

using System;

public class Example
{
   public static void Main()
   {
      bool raining = false;
      bool busLate = true;

      Console.WriteLine("It is raining: {0}",
                        raining ? "Yes" : "No");
      Console.WriteLine("The bus is late: {0}",
                        busLate ? "Yes" : "No" );
   }
}
// The example displays the following output:
//       It is raining: No
//       The bus is late: Yes
Module Example
   Public Sub Main()
      Dim raining As Boolean = False
      Dim busLate As Boolean = True

      Console.WriteLine("It is raining: {0}", 
                        If(raining, "Yes", "No"))
      Console.WriteLine("The bus is late: {0}", 
                        If(busLate, "Yes", "No"))
   End Sub
End Module
' The example displays the following output:
'       It is raining: No
'       The bus is late: Yes

Pour les opérations de mise en forme personnalisées plus complexes, y compris la mise en forme dépendante de la culture, vous pouvez appeler la String.Format(IFormatProvider, String, Object[]) méthode et fournir une ICustomFormatter implémentation. L’exemple suivant implémente les ICustomFormatter IFormatProvider interfaces et pour fournir des chaînes booléennes dépendantes de la culture pour les cultures anglais (États-Unis), français (France) et russe (Russie).

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      String[] cultureNames = { "", "en-US", "fr-FR", "ru-RU" };
      foreach (var cultureName in cultureNames) {
         bool value = true;
         CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
         BooleanFormatter formatter = new BooleanFormatter(culture);

         string result = string.Format(formatter, "Value for '{0}': {1}", culture.Name, value);
         Console.WriteLine(result);
      }
   }
}

public class BooleanFormatter : ICustomFormatter, IFormatProvider
{
   private CultureInfo culture;

   public BooleanFormatter() : this(CultureInfo.CurrentCulture)
   { }

   public BooleanFormatter(CultureInfo culture)
   {
      this.culture = culture;
   }

   public Object GetFormat(Type formatType)
   {
      if (formatType == typeof(ICustomFormatter))
         return this;
      else
         return null;
   }

   public string Format(string fmt, Object arg, IFormatProvider formatProvider)
   {
      // Exit if another format provider is used.
      if (! formatProvider.Equals(this)) return null;

      // Exit if the type to be formatted is not a Boolean
      if (! (arg is Boolean)) return null;

      bool value = (bool) arg;
      switch (culture.Name) {
         case "en-US":
            return value.ToString();
         case "fr-FR":
            if (value)
               return "vrai";
            else
               return "faux";
         case "ru-RU":
            if (value)
               return "верно";
            else
               return "неверно";
         default:
            return value.ToString();
      }
   }
}
// The example displays the following output:
//       Value for '': True
//       Value for 'en-US': True
//       Value for 'fr-FR': vrai
//       Value for 'ru-RU': верно
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim cultureNames() As String = { "", "en-US", "fr-FR", "ru-RU" }
      For Each cultureName In cultureNames
         Dim value As Boolean = True
         Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
         Dim formatter As New BooleanFormatter(culture)
         
         Dim result As String = String.Format(formatter, "Value for '{0}': {1}", culture.Name, value)
         Console.WriteLine(result)
      Next
   End Sub
End Module

Public Class BooleanFormatter 
   Implements ICustomFormatter, IFormatProvider
   
   Private culture As CultureInfo
   
   Public Sub New()
      Me.New(CultureInfo.CurrentCulture)
   End Sub
   
   Public Sub New(culture As CultureInfo)
      Me.culture = culture 
   End Sub
   
   Public Function GetFormat(formatType As Type) As Object _
                   Implements IFormatProvider.GetFormat
      If formatType Is GetType(ICustomFormatter) Then
         Return Me
      Else
         Return Nothing
      End If                
   End Function
   
   Public Function Format(fmt As String, arg As Object, 
                          formatProvider As IFormatProvider) As String _
                   Implements ICustomFormatter.Format
      ' Exit if another format provider is used.
      If Not formatProvider.Equals(Me) Then Return Nothing
      
      ' Exit if the type to be formatted is not a Boolean
      If Not TypeOf arg Is Boolean Then Return Nothing
      
      Dim value As Boolean = CBool(arg)
      Select culture.Name
         Case "en-US"
            Return value.ToString()
         Case "fr-FR"
            If value Then
               Return "vrai"
            Else
               Return "faux"
            End If      
         Case "ru-RU"
            If value Then
               Return "верно"
            Else
               Return "неверно"
            End If   
         Case Else
            Return value.ToString()  
      End Select
   End Function
End Class
' The example displays the following output:
'          Value for '': True
'          Value for 'en-US': True
'          Value for 'fr-FR': vrai
'          Value for 'ru-RU': верно

Si vous le souhaitez, vous pouvez utiliser des fichiers de ressources pour définir des chaînes booléennes spécifiques à la culture.

Convertir en valeurs booléennes

La Boolean structure implémente l' IConvertible interface. Par conséquent, vous pouvez utiliser la Convert classe pour effectuer des conversions entre une Boolean valeur et tout autre type primitif dans .net, ou vous pouvez appeler les Boolean implémentations explicites de la structure. Toutefois, les conversions entre un Boolean et les types suivants ne sont pas prises en charge, donc les méthodes de conversion correspondantes lèvent une InvalidCastException exception :

Toutes les conversions de nombres intégraux ou à virgule flottante en valeurs booléennes convertissent des valeurs non null en valeurs true et nulles en false . L’exemple suivant illustre cela en appelant les surcharges sélectionnées de la Convert.ToBoolean classe.

using System;

public class Example
{
   public static void Main()
   {
      Byte byteValue = 12;
      Console.WriteLine(Convert.ToBoolean(byteValue));
      Byte byteValue2 = 0;
      Console.WriteLine(Convert.ToBoolean(byteValue2));
      int intValue = -16345;
      Console.WriteLine(Convert.ToBoolean(intValue));
      long longValue = 945;
      Console.WriteLine(Convert.ToBoolean(longValue));
      SByte sbyteValue = -12;
      Console.WriteLine(Convert.ToBoolean(sbyteValue));
      double dblValue = 0;
      Console.WriteLine(Convert.ToBoolean(dblValue));
      float sngValue = .0001f;
      Console.WriteLine(Convert.ToBoolean(sngValue));
   }
}
// The example displays the following output:
//       True
//       False
//       True
//       True
//       True
//       False
//       True
Module Example
   Public Sub Main()
      Dim byteValue As Byte = 12
      Console.WriteLine(Convert.ToBoolean(byteValue))
      Dim byteValue2 As Byte = 0
      Console.WriteLine(Convert.ToBoolean(byteValue2))
      Dim intValue As Integer = -16345
      Console.WriteLine(Convert.ToBoolean(intValue))
      Dim longValue As Long = 945
      Console.WriteLine(Convert.ToBoolean(longValue))
      Dim sbyteValue As SByte = -12
      Console.WriteLine(Convert.ToBoolean(sbyteValue))
      Dim dblValue As Double = 0
      Console.WriteLine(Convert.ToBoolean(dblValue))
      Dim sngValue As Single = .0001
      Console.WriteLine(Convert.ToBoolean(sngValue))
   End Sub
End Module
' The example displays the following output:
'       True
'       False
'       True
'       True
'       True
'       False
'       True

Lors de la conversion de valeurs booléennes en valeurs numériques, les méthodes de conversion de la Convert classe convertissent true en 1 et false en 0. toutefois, les fonctions de conversion Visual Basic sont converties true en 255 (pour les conversions en Byte valeurs) ou-1 (pour toutes les autres conversions numériques). l’exemple suivant convertit en true valeurs numériques à l’aide d’une Convert méthode, et, dans le cas de l’exemple de Visual Basic, à l’aide de l’opérateur de conversion propre au langage Visual Basic.

using System;

public class Example
{
   public static void Main()
   {
      bool flag = true;

      byte byteValue;
      byteValue = Convert.ToByte(flag);
      Console.WriteLine("{0} -> {1}", flag, byteValue);

      sbyte sbyteValue;
      sbyteValue = Convert.ToSByte(flag);
      Console.WriteLine("{0} -> {1}", flag, sbyteValue);

      double dblValue;
      dblValue = Convert.ToDouble(flag);
      Console.WriteLine("{0} -> {1}", flag, dblValue);

      int intValue;
      intValue = Convert.ToInt32(flag);
      Console.WriteLine("{0} -> {1}", flag, intValue);
   }
}
// The example displays the following output:
//       True -> 1
//       True -> 1
//       True -> 1
//       True -> 1
Module Example
   Public Sub Main()
      Dim flag As Boolean = true
      
      Dim byteValue As Byte   
      byteValue = Convert.ToByte(flag)
      Console.WriteLine("{0} -> {1} ({2})", flag, byteValue, 
                                            byteValue.GetType().Name)         
      byteValue = CByte(flag)
      Console.WriteLine("{0} -> {1} ({2})", flag, byteValue, 
                                            byteValue.GetType().Name)         
      
      Dim sbyteValue As SByte
      sbyteValue = Convert.ToSByte(flag)
      Console.WriteLine("{0} -> {1} ({2})", flag, sbyteValue, 
                                            sbyteValue.GetType().Name)         
      sbyteValue = CSByte(flag)
      Console.WriteLine("{0} -> {1} ({2})", flag, sbyteValue, 
                                            sbyteValue.GetType().Name)         

      Dim dblValue As Double
      dblValue = Convert.ToDouble(flag)
      Console.WriteLine("{0} -> {1} ({2})", flag, dblValue, 
                                            dblValue.GetType().Name)         
      dblValue = CDbl(flag)
      Console.WriteLine("{0} -> {1} ({2})", flag, dblValue, 
                                            dblValue.GetType().Name)         

      Dim intValue As Integer
      intValue = Convert.ToInt32(flag)
      Console.WriteLine("{0} -> {1} ({2})", flag, intValue, 
                                            intValue.GetType().Name)         
      intValue = CInt(flag)
      Console.WriteLine("{0} -> {1} ({2})", flag, intValue, 
                                            intValue.GetType().Name)         
   End Sub
End Module
' The example displays the following output:
'       True -> 1 (Byte)
'       True -> 255 (Byte)
'       True -> 1 (SByte)
'       True -> -1 (SByte)
'       True -> 1 (Double)
'       True -> -1 (Double)
'       True -> 1 (Int32)
'       True -> -1 (Int32)

Pour les conversions de Boolean en valeurs de chaîne, consultez la section mise en forme des valeurs booléennes . Pour les conversions de chaînes en Boolean valeurs, consultez la section analyse des valeurs booléennes .

Analyser les valeurs booléennes

La Boolean structure comprend deux méthodes d’analyse statiques, Parse et TryParse , qui convertissent une chaîne en valeur booléenne. La représentation sous forme de chaîne d’une valeur booléenne est définie par les équivalents qui ne respectent pas la casse des valeurs des TrueString FalseString champs et, respectivement « true » et « false ». En d’autres termes, les seules chaînes analysées avec succès sont « true », « false », « true », « false » ou un équivalent à casse mixte. Vous ne pouvez pas analyser correctement les chaînes numériques telles que « 0 » ou « 1 ». Les espaces blancs de début ou de fin ne sont pas pris en compte lors de l’exécution de la comparaison de chaînes.

L’exemple suivant utilise les Parse TryParse méthodes et pour analyser un certain nombre de chaînes. Notez que seuls les équivalents ne respectant pas la casse de « true » et « false » peuvent être analysés avec succès.

using System;

public class Example
{
   public static void Main()
   {
      string[] values = { null, String.Empty, "True", "False",
                          "true", "false", "    true    ",
                           "TrUe", "fAlSe", "fa lse", "0",
                          "1", "-1", "string" };
      // Parse strings using the Boolean.Parse method.
      foreach (var value in values) {
         try {
            bool flag = Boolean.Parse(value);
            Console.WriteLine("'{0}' --> {1}", value, flag);
         }
         catch (ArgumentException) {
            Console.WriteLine("Cannot parse a null string.");
         }
         catch (FormatException) {
            Console.WriteLine("Cannot parse '{0}'.", value);
         }
      }
      Console.WriteLine();
      // Parse strings using the Boolean.TryParse method.
      foreach (var value in values) {
         bool flag = false;
         if (Boolean.TryParse(value, out flag))
            Console.WriteLine("'{0}' --> {1}", value, flag);
         else
            Console.WriteLine("Unable to parse '{0}'", value);
      }
   }
}
// The example displays the following output:
//       Cannot parse a null string.
//       Cannot parse ''.
//       'True' --> True
//       'False' --> False
//       'true' --> True
//       'false' --> False
//       '    true    ' --> True
//       'TrUe' --> True
//       'fAlSe' --> False
//       Cannot parse 'fa lse'.
//       Cannot parse '0'.
//       Cannot parse '1'.
//       Cannot parse '-1'.
//       Cannot parse 'string'.
//
//       Unable to parse ''
//       Unable to parse ''
//       'True' --> True
//       'False' --> False
//       'true' --> True
//       'false' --> False
//       '    true    ' --> True
//       'TrUe' --> True
//       'fAlSe' --> False
//       Cannot parse 'fa lse'.
//       Unable to parse '0'
//       Unable to parse '1'
//       Unable to parse '-1'
//       Unable to parse 'string'
Module Example
   Public Sub Main()
      Dim values() As String = { Nothing, String.Empty, "True", "False", 
                                 "true", "false", "    true    ", 
                                 "TrUe", "fAlSe", "fa lse", "0", 
                                 "1", "-1", "string" }
      ' Parse strings using the Boolean.Parse method.                    
      For Each value In values
         Try
            Dim flag As Boolean = Boolean.Parse(value)
            Console.WriteLine("'{0}' --> {1}", value, flag)
         Catch e As ArgumentException
            Console.WriteLine("Cannot parse a null string.")
         Catch e As FormatException
            Console.WriteLine("Cannot parse '{0}'.", value)
         End Try         
      Next  
      Console.WriteLine()
      ' Parse strings using the Boolean.TryParse method.                    
      For Each value In values
         Dim flag As Boolean = False
         If Boolean.TryParse(value, flag)
            Console.WriteLine("'{0}' --> {1}", value, flag)
         Else
            Console.WriteLine("Cannot parse '{0}'.", value)
         End If         
      Next  
   End Sub
End Module
' The example displays the following output:
'       Cannot parse a null string.
'       Cannot parse ''.
'       'True' --> True
'       'False' --> False
'       'true' --> True
'       'false' --> False
'       '    true    ' --> True
'       'TrUe' --> True
'       'fAlSe' --> False
'       Cannot parse 'fa lse'.
'       Cannot parse '0'.
'       Cannot parse '1'.
'       Cannot parse '-1'.
'       Cannot parse 'string'.
'       
'       Unable to parse ''
'       Unable to parse ''
'       'True' --> True
'       'False' --> False
'       'true' --> True
'       'false' --> False
'       '    true    ' --> True
'       'TrUe' --> True
'       'fAlSe' --> False
'       Cannot parse 'fa lse'.
'       Unable to parse '0'
'       Unable to parse '1'
'       Unable to parse '-1'
'       Unable to parse 'string'

si vous programmez dans Visual Basic, vous pouvez utiliser la CBool fonction pour convertir la représentation sous forme de chaîne d’un nombre en valeur booléenne. « 0 » est converti en false et la représentation sous forme de chaîne de toute valeur différente de zéro est convertie en true . si vous ne programmez pas dans Visual Basic, vous devez convertir votre chaîne numérique en nombre avant de la convertir en valeur booléenne. L’exemple suivant illustre cela en convertissant un tableau d’entiers en valeurs booléennes.

using System;

public class Example
{
   public static void Main()
   {
      String[] values = { "09", "12.6", "0", "-13 " };
      foreach (var value in values) {
         bool success, result;
         int number;
         success = Int32.TryParse(value, out number);
         if (success) {
            // The method throws no exceptions.
            result = Convert.ToBoolean(number);
            Console.WriteLine("Converted '{0}' to {1}", value, result);
         }
         else {
            Console.WriteLine("Unable to convert '{0}'", value);
         }
      }
   }
}
// The example displays the following output:
//       Converted '09' to True
//       Unable to convert '12.6'
//       Converted '0' to False
//       Converted '-13 ' to True
Module Example
   Public Sub Main()
      Dim values() As String = { "09", "12.6", "0", "-13 " }
      For Each value In values
         Dim success, result As Boolean
         Dim number As Integer 
         success = Int32.TryParse(value, number)
         If success Then
            ' The method throws no exceptions.
            result = Convert.ToBoolean(number)
            Console.WriteLine("Converted '{0}' to {1}", value, result)
         Else
            Console.WriteLine("Unable to convert '{0}'", value)
         End If         
      Next
   End Sub
End Module
' The example displays the following output:
'       Converted '09' to True
'       Unable to convert '12.6'
'       Converted '0' to False
'       Converted '-13 ' to True

Comparer des valeurs booléennes

Étant donné que les valeurs booléennes sont true ou false , il y a peu de raison d’appeler explicitement la CompareTo méthode, qui indique si une instance est supérieure, inférieure ou égale à une valeur spécifiée. En général, pour comparer deux variables booléennes, vous appelez la Equals méthode ou utilisez l’opérateur d’égalité de votre langage.

Toutefois, lorsque vous souhaitez comparer une variable booléenne avec la valeur booléenne littérale true ou false , il n’est pas nécessaire d’effectuer une comparaison explicite, car le résultat de l’évaluation d’une valeur booléenne est cette valeur booléenne. Par exemple, les expressions

if (booleanValue == true) {
If booleanValue = True Then

et

if (booleanValue) {
If booleanValue Then

sont équivalents, mais la seconde est plus compacte. Toutefois, les deux techniques offrent des performances comparables.

Utiliser des valeurs booléennes comme valeurs binaires

Une valeur booléenne occupe un octet de mémoire, comme le montre l’exemple C# suivant. L’exemple doit être compilé avec le /unsafe commutateur.

using System;

public struct BoolStruct
{
   public bool flag1;
   public bool flag2;
   public bool flag3;
   public bool flag4;
   public bool flag5;
}

public class Example
{
   public static void Main()
   {
      unsafe {
         BoolStruct b = new BoolStruct();
         bool* addr = (bool*) &b;
         Console.WriteLine("Size of BoolStruct: {0}", sizeof(BoolStruct));
         Console.WriteLine("Field offsets:");
         Console.WriteLine("   flag1: {0}", (bool*) &b.flag1 - addr);
         Console.WriteLine("   flag1: {0}", (bool*) &b.flag2 - addr);
         Console.WriteLine("   flag1: {0}", (bool*) &b.flag3 - addr);
         Console.WriteLine("   flag1: {0}", (bool*) &b.flag4 - addr);
         Console.WriteLine("   flag1: {0}", (bool*) &b.flag5 - addr);
      }
   }
}
// The example displays the following output:
//       Size of BoolStruct: 5
//       Field offsets:
//          flag1: 0
//          flag1: 1
//          flag1: 2
//          flag1: 3
//          flag1: 4

Le bit de poids faible de l’octet est utilisé pour représenter sa valeur. La valeur 1 représente true ; une valeur de 0 représente false .

Conseil

Vous pouvez utiliser la System.Collections.Specialized.BitVector32 structure pour travailler avec des jeux de valeurs booléennes.

Vous pouvez convertir une valeur booléenne en sa représentation binaire en appelant la BitConverter.GetBytes(Boolean) méthode. La méthode retourne un tableau d’octets avec un seul élément. Pour restaurer une valeur booléenne à partir de sa représentation binaire, vous pouvez appeler la BitConverter.ToBoolean(Byte[], Int32) méthode.

L’exemple suivant appelle la BitConverter.GetBytes méthode pour convertir une valeur booléenne en sa représentation binaire et affiche les bits individuels de la valeur, puis appelle la BitConverter.ToBoolean méthode pour restaurer la valeur à partir de sa représentation binaire.

using System;

public class Example
{
   public static void Main()
   {
      bool[] flags = { true, false };
      foreach (var flag in flags) {
         // Get binary representation of flag.
         Byte value = BitConverter.GetBytes(flag)[0];
         Console.WriteLine("Original value: {0}", flag);
         Console.WriteLine("Binary value:   {0} ({1})", value,
                           GetBinaryString(value));
         // Restore the flag from its binary representation.
         bool newFlag = BitConverter.ToBoolean( new Byte[] { value }, 0);
         Console.WriteLine("Restored value: {0}\n", flag);
      }
   }

   private static string GetBinaryString(Byte value)
   {
      string retVal = Convert.ToString(value, 2);
      return new string('0', 8 - retVal.Length) + retVal;
   }
}
// The example displays the following output:
//       Original value: True
//       Binary value:   1 (00000001)
//       Restored value: True
//
//       Original value: False
//       Binary value:   0 (00000000)
//       Restored value: False
Module Example
   Public Sub Main()
      Dim flags() As Boolean = { True, False }
      For Each flag In flags
         ' Get binary representation of flag.
         Dim value As Byte = BitConverter.GetBytes(flag)(0)
         Console.WriteLine("Original value: {0}", flag)
         Console.WriteLine("Binary value:   {0} ({1})", value, 
                           GetBinaryString(value))
         ' Restore the flag from its binary representation.
         Dim newFlag As Boolean = BitConverter.ToBoolean( { value }, 0)
         Console.WriteLine("Restored value: {0}", flag)
         Console.WriteLine()
      Next
   End Sub
   
   Private Function GetBinaryString(value As Byte) As String
      Dim retVal As String = Convert.ToString(value, 2)
      Return New String("0"c, 8 - retVal.Length) + retVal
   End Function
End Module
' The example displays the following output:
'       Original value: True
'       Binary value:   1 (00000001)
'       Restored value: True
'       
'       Original value: False
'       Binary value:   0 (00000000)
'       Restored value: False

Effectuer des opérations avec des valeurs booléennes

Cette section montre comment les valeurs booléennes sont utilisées dans les applications. La première section traite de son utilisation en tant qu’indicateur. Le deuxième illustre son utilisation pour les opérations arithmétiques.

Valeurs booléennes en tant qu’indicateurs

Les variables booléennes sont généralement utilisées comme indicateurs, pour signaler la présence ou l’absence d’une condition. Par exemple, dans la String.Compare(String, String, Boolean) méthode, le dernier paramètre, ignoreCase , est un indicateur qui indique si la comparaison de deux chaînes ne respecte pas la casse ( ignoreCase a la casse true ) ou respecte la casse (a la valeur ignoreCase false ). La valeur de l’indicateur peut ensuite être évaluée dans une instruction conditionnelle.

L’exemple suivant utilise une application console simple pour illustrer l’utilisation de variables booléennes comme indicateurs. L’application accepte les paramètres de ligne de commande qui permettent de rediriger la sortie vers un fichier spécifié (le /f commutateur) et qui permet d’envoyer la sortie à la fois vers un fichier spécifié et vers la console (le /b commutateur). L’application définit un indicateur nommé isRedirected pour indiquer si la sortie doit être envoyée à un fichier et un indicateur nommé isBoth pour indiquer que la sortie doit être envoyée à la console.

using System;
using System.IO;
using System.Threading;

public class Example
{
   public static void Main()
   {
      // Initialize flag variables.
      bool isRedirected = false;
      bool isBoth = false;
      String fileName = "";
      StreamWriter sw = null;

      // Get any command line arguments.
      String[] args = Environment.GetCommandLineArgs();
      // Handle any arguments.
      if (args.Length > 1) {
         for (int ctr = 1; ctr < args.Length; ctr++) {
            String arg = args[ctr];
            if (arg.StartsWith("/") || arg.StartsWith("-")) {
               switch (arg.Substring(1).ToLower())
               {
                  case "f":
                     isRedirected = true;
                     if (args.Length < ctr + 2) {
                        ShowSyntax("The /f switch must be followed by a filename.");
                        return;
                     }
                     fileName = args[ctr + 1];
                     ctr++;
                     break;
                  case "b":
                     isBoth = true;
                     break;
                  default:
                     ShowSyntax(String.Format("The {0} switch is not supported",
                                              args[ctr]));
                     return;
               }
            }
         }
      }

      // If isBoth is True, isRedirected must be True.
      if (isBoth &&  ! isRedirected) {
         ShowSyntax("The /f switch must be used if /b is used.");
         return;
      }

      // Handle output.
      if (isRedirected) {
         sw = new StreamWriter(fileName);
         if (!isBoth)
            Console.SetOut(sw);
      }
      String msg = String.Format("Application began at {0}", DateTime.Now);
      Console.WriteLine(msg);
      if (isBoth) sw.WriteLine(msg);
      Thread.Sleep(5000);
      msg = String.Format("Application ended normally at {0}", DateTime.Now);
      Console.WriteLine(msg);
      if (isBoth) sw.WriteLine(msg);
      if (isRedirected) sw.Close();
   }

   private static void ShowSyntax(String errMsg)
   {
      Console.WriteLine(errMsg);
      Console.WriteLine("\nSyntax: Example [[/f <filename> [/b]]\n");
   }
}
Imports System.IO
Imports System.Threading

Module Example
   Public Sub Main()
      ' Initialize flag variables.
      Dim isRedirected, isBoth As Boolean 
      Dim fileName As String = ""
      Dim sw As StreamWriter = Nothing
      
      ' Get any command line arguments.
      Dim args() As String = Environment.GetCommandLineArgs()
      ' Handle any arguments.
      If args.Length > 1 Then
         For ctr = 1 To args.Length - 1
            Dim arg As String = args(ctr)
            If arg.StartsWith("/") OrElse arg.StartsWith("-") Then
               Select Case arg.Substring(1).ToLower()
                  Case "f"
                     isRedirected = True
                     If args.Length < ctr + 2 Then
                        ShowSyntax("The /f switch must be followed by a filename.")
                        Exit Sub
                     End If
                     fileName = args(ctr + 1)
                     ctr += 1
                  Case "b"
                     isBoth = True
                  Case Else
                     ShowSyntax(String.Format("The {0} switch is not supported", 
                                              args(ctr)))
                     Exit Sub
               End Select
            End If   
         Next
      End If

      ' If isBoth is True, isRedirected must be True.
      If isBoth And Not isRedirected Then 
         ShowSyntax("The /f switch must be used if /b is used.")
         Exit Sub
      End If

      ' Handle output.
      If isRedirected Then
         sw = New StreamWriter(fileName) 
         If Not IsBoth Then
            Console.SetOut(sw) 
         End If
      End If     
      Dim msg As String = String.Format("Application began at {0}", Date.Now)
      Console.WriteLine(msg)
      If isBoth Then sw.WriteLine(msg)
      Thread.Sleep(5000)
      msg = String.Format("Application ended normally at {0}", Date.Now)
      Console.WriteLine(msg)
      If isBoth Then sw.WriteLine(msg)
      If isRedirected Then sw.Close()
   End Sub
   
   Private Sub ShowSyntax(errMsg As String)
      Console.WriteLine(errMsg)
      Console.WriteLine()
      Console.WriteLine("Syntax: Example [[/f <filename> [/b]]")
      Console.WriteLine()
   End Sub
End Module

Opérations booléennes et arithmétiques

Une valeur booléenne est parfois utilisée pour indiquer la présence d’une condition qui déclenche un calcul mathématique. Par exemple, une hasShippingCharge variable peut servir d’indicateur pour indiquer s’il faut ajouter des frais d’expédition à un montant de facture.

Étant donné qu’une opération avec une false valeur n’a aucun effet sur le résultat d’une opération, il n’est pas nécessaire de convertir la valeur booléenne en valeur intégrale à utiliser dans l’opération mathématique. Au lieu de cela, vous pouvez utiliser la logique conditionnelle.

L’exemple suivant calcule une quantité composée d’un sous-total, de frais d’expédition et de frais de service facultatifs. La hasServiceCharge variable détermine si les frais de service sont appliqués. Au lieu de convertir hasServiceCharge une valeur numérique en la multipliant par la quantité de frais de service, l’exemple utilise une logique conditionnelle pour ajouter le montant de frais de service s’il est applicable.

using System;

public class Example
{
   public static void Main()
   {
      bool[] hasServiceCharges = { true, false };
      Decimal subtotal = 120.62m;
      Decimal shippingCharge = 2.50m;
      Decimal serviceCharge = 5.00m;

      foreach (var hasServiceCharge in hasServiceCharges) {
         Decimal total = subtotal + shippingCharge +
                                (hasServiceCharge ? serviceCharge : 0);
         Console.WriteLine("hasServiceCharge = {1}: The total is {0:C2}.",
                           total, hasServiceCharge);
      }
   }
}
// The example displays output like the following:
//       hasServiceCharge = True: The total is $128.12.
//       hasServiceCharge = False: The total is $123.12.
Module Example
   Public Sub Main()
      Dim hasServiceCharges() As Boolean = { True, False }
      Dim subtotal As Decimal = 120.62d
      Dim shippingCharge As Decimal = 2.50d
      Dim serviceCharge As Decimal = 5.00d
      
      For Each hasServiceCharge In hasServiceCharges
         Dim total As Decimal = subtotal + shippingCharge + 
                                If(hasServiceCharge, serviceCharge, 0)
         Console.WriteLine("hasServiceCharge = {1}: The total is {0:C2}.", 
                           total, hasServiceCharge)                       
      Next
   End Sub
End Module
' The example displays output like the following:
'       hasServiceCharge = True: The total is $128.12.
'       hasServiceCharge = False: The total is $123.12.

Valeurs booléennes et Interop

Si le marshaling des types de données de base en COM est généralement simple, le Boolean type de données est une exception. Vous pouvez appliquer l' MarshalAsAttribute attribut pour marshaler le Boolean type vers l’une des représentations suivantes :

Type d'énumération Format non managé
UnmanagedType.Bool Valeur entière de 4 octets, où toute valeur différente de zéro représente true et 0 représente false . Il s’agit du format par défaut d’un Boolean champ dans une structure et d’un paramètre dans les appels de code non Boolean managé.
UnmanagedType.U1 Valeur entière de 1 octet, où 1 représente true et 0 représente false .
UnmanagedType.VariantBool Valeur entière de 2 octets, où-1 représente true et 0 représente false . Il s’agit du format par défaut d’un Boolean paramètre dans COM Interop appels.

Champs

FalseString

Représente la valeur booléenne false sous forme de chaîne. Ce champ est en lecture seule.

TrueString

Représente la valeur booléenne true sous forme de chaîne. Ce champ est en lecture seule.

Méthodes

CompareTo(Boolean)

Compare cette instance à un objet Boolean spécifié et retourne un entier qui indique la relation entre ces deux éléments.

CompareTo(Object)

Compare cette instance à l'objet spécifié et retourne un entier qui indique la relation entre ces deux éléments.

Equals(Boolean)

Retourne une valeur indiquant si cette instance est égale à un objet Boolean spécifié.

Equals(Object)

Retourne une valeur indiquant si cette instance équivaut à un objet spécifié.

GetHashCode()

Retourne le code de hachage de cette instance.

GetTypeCode()

Retourne le code de type pour le type valeur Boolean.

Parse(ReadOnlySpan<Char>)

Convertit la représentation d’étendue spécifiée d’une valeur logique en son équivalent Boolean.

Parse(String)

Convertit la représentation sous forme de chaîne spécifiée d’une valeur logique en son équivalent Boolean.

ToString()

Convertit la valeur de cette instance en sa représentation sous forme de chaîne équivalente ("True" ou "False").

ToString(IFormatProvider)

Convertit la valeur de cette instance en sa représentation sous forme de chaîne équivalente ("True" ou "False").

TryFormat(Span<Char>, Int32)

Tente de mettre en forme la valeur de l’instance booléenne actuelle dans la plage de caractères fournie.

TryParse(ReadOnlySpan<Char>, Boolean)

Tente de convertir la représentation de plage sous forme de chaîne d'une valeur logique en son Boolean équivalent.

TryParse(String, Boolean)

Tente de convertir la représentation sous forme de chaîne d'une valeur logique en son Boolean équivalent.

Implémentations d’interfaces explicites

IComparable.CompareTo(Object)

Compare l'instance actuelle à un autre objet du même type et retourne un entier qui indique si l'instance actuelle précède ou suit un autre objet ou se trouve à la même position que ce dernier dans l'ordre de tri.

IConvertible.GetTypeCode()

Retourne le TypeCode de cette instance.

IConvertible.ToBoolean(IFormatProvider)

Pour obtenir une description de ce membre, consultez ToBoolean(IFormatProvider).

IConvertible.ToByte(IFormatProvider)

Pour obtenir une description de ce membre, consultez ToByte(IFormatProvider).

IConvertible.ToChar(IFormatProvider)

Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

IConvertible.ToDateTime(IFormatProvider)

Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

IConvertible.ToDecimal(IFormatProvider)

Pour obtenir une description de ce membre, consultez ToDecimal(IFormatProvider).

IConvertible.ToDouble(IFormatProvider)

Pour obtenir une description de ce membre, consultez ToDouble(IFormatProvider).

IConvertible.ToInt16(IFormatProvider)

Pour obtenir une description de ce membre, consultez ToInt16(IFormatProvider).

IConvertible.ToInt32(IFormatProvider)

Pour obtenir une description de ce membre, consultez ToInt32(IFormatProvider).

IConvertible.ToInt64(IFormatProvider)

Pour obtenir une description de ce membre, consultez ToInt64(IFormatProvider).

IConvertible.ToSByte(IFormatProvider)

Pour obtenir une description de ce membre, consultez ToSByte(IFormatProvider).

IConvertible.ToSingle(IFormatProvider)

Pour obtenir une description de ce membre, consultez ToSingle(IFormatProvider).

IConvertible.ToString(IFormatProvider)

Convertit la valeur de cette instance en une chaîne équivalente, en utilisant les informations de mise en forme propres à la culture spécifiées.

IConvertible.ToType(Type, IFormatProvider)

Pour obtenir une description de ce membre, consultez ToType(Type, IFormatProvider).

IConvertible.ToUInt16(IFormatProvider)

Pour obtenir une description de ce membre, consultez ToUInt16(IFormatProvider).

IConvertible.ToUInt32(IFormatProvider)

Pour obtenir une description de ce membre, consultez ToUInt32(IFormatProvider).

IConvertible.ToUInt64(IFormatProvider)

Pour obtenir une description de ce membre, consultez ToUInt64(IFormatProvider).

S’applique à

Cohérence de thread

Tous les membres de ce type sont thread-safe. Les membres qui semblent modifier l’état de l’instance retournent en fait une nouvelle instance initialisée avec la nouvelle valeur. Comme pour tout autre type, la lecture et l’écriture dans une variable partagée qui contient une instance de ce type doivent être protégées par un verrou pour garantir la sécurité des threads.