导出 (0) 打印
全部展开
此文章由机器翻译。 将光标移到文章的句子上,以查看原文。 更多信息。
译文
原文

Boolean 结构

表示布尔值 (truefalse) 的值。

命名空间:  System
程序集:  mscorlib(在 mscorlib.dll 中)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Boolean : IComparable, IConvertible, 
	IComparable<bool>, IEquatable<bool>

Boolean 类型公开以下成员。

  名称说明
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持CompareTo(Boolean)将此实例与指定的 Boolean 对象进行比较,返回一个指示二者关系的整数。
公共方法由 XNA Framework 提供支持CompareTo(Object)将此实例与指定对象进行比较,返回一个指示二者关系的整数。
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持Equals(Boolean)返回一个值,该值指示此实例是否与指定的 Boolean 对象相等。
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持Equals(Object)返回一个值,该值指示此实例是否等于指定的对象。 (重写 ValueType.Equals(Object)。)
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持GetHashCode返回此实例的哈希代码。 (重写 ValueType.GetHashCode()。)
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持GetType获取当前实例的 Type (继承自 Object。)
公共方法由 XNA Framework 提供支持GetTypeCode返回值类型 BooleanTypeCode
公共方法静态成员由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持Parse将逻辑值的指定字符串表示形式转换为其等效的 Boolean 值;如果该字符串不等于 Boolean.TrueStringBoolean.FalseString 的值,则会引发异常。
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持ToString()将此实例的值转换为其等效字符串表示形式(“True”或“False”)。 (重写 ValueType.ToString()。)
公共方法由 XNA Framework 提供支持ToString(IFormatProvider)将此实例的值转换为其等效字符串表示形式(“True”或“False”)。
公共方法静态成员受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持TryParse尝试将逻辑值的指定字符串表示形式转换为其等效的 Boolean 值。 一个指示转换是否成功的返回值。
页首

  名称说明
公共字段静态成员由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持FalseString将布尔值 false 表示为字符串。 此字段为只读。
公共字段静态成员由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持TrueString将布尔值 true 表示为字符串。 此字段为只读。
页首

  名称说明
显式接口实现私有方法受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持IComparable.CompareTo基础结构。将当前实例与同一类型的另一个对象进行比较,并返回一个整数,该整数指示当前实例在排序顺序中的位置是位于另一个对象之前、之后还是与其位置相同。
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToBoolean基础结构。有关此成员的说明,请参见 IConvertible.ToBoolean
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToByte基础结构。有关此成员的说明,请参见 IConvertible.ToByte
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToChar基础结构。不支持此转换。 尝试使用此方法将引发 InvalidCastException
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToDateTime基础结构。不支持此转换。 尝试使用此方法将引发 InvalidCastException
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToDecimal基础结构。有关此成员的说明,请参见 IConvertible.ToDecimal
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToDouble基础结构。有关此成员的说明,请参见 IConvertible.ToDouble
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToInt16基础结构。有关此成员的说明,请参见 IConvertible.ToInt16
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToInt32基础结构。有关此成员的说明,请参见 IConvertible.ToInt32
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToInt64基础结构。有关此成员的说明,请参见 IConvertible.ToInt64
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToSByte基础结构。有关此成员的说明,请参见 IConvertible.ToSByte
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToSingle基础结构。有关此成员的说明,请参见 IConvertible.ToSingle
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToType基础结构。有关此成员的说明,请参见 IConvertible.ToType
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToUInt16基础结构。有关此成员的说明,请参见 IConvertible.ToUInt16
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToUInt32基础结构。有关此成员的说明,请参见 IConvertible.ToUInt32
显式接口实现私有方法由 XNA Framework 提供支持IConvertible.ToUInt64基础结构。有关此成员的说明,请参见 IConvertible.ToUInt64
页首

Boolean 实例可具有两个值之一:truefalse

Boolean 结构提供支持下列任务的方法:

以下各节解释这些任务和其他用法详细信息:

格式布尔值
转换为布尔值
分析布尔值
比较布尔值
二进制值为的布尔域使用
执行一个操作

格式布尔值

Boolean 的字符串表示形式或“True”或“False”对于 true 值的 false 值。 Boolean 值的字符串表示形式由只读的 TrueStringFalseString 字段定义。

使用 ToString 方法转换布尔值与字符串。 布尔结构包括两个 ToString 重载:无参数的 ToString() 方法和 ToString(IFormatProvider) 方法,该控件包括参数格式。 但是,将忽略此参数,因为两个重载,产生相同的字符串。 ToString(IFormatProvider) 方法不支持区分区域性的格式。

下面的示例演示与 ToString 方法的格式。 请注意,示例使用 复合格式 功能,因此 ToString 方法隐式调用。


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


结构由于 Boolean 只能有两个值,添加自定义格式化很容易。 对于其他字符串替换为“true”和“false”将替换的简单自定义格式,在 C# 中使用语言支持的所有条件的计算功能,如 条件运算符如果运算符 Visual Basic。 下面的示例使用此技术格式 Boolean 值为“”和“不”而非“true”和“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


对于更复杂的自定义操作,包括格式区域性敏感的格式设置,您可以调用 String.Format(IFormatProvider, String, Object[])ICustomFormatter 方法提供实现。 下面的示例实现了 ICustomFormatterIFormatProvider 接口为英语 (美国) (法国),法语 (法国) "和"俄语区域性提供区域性敏感的布尔字符串。


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': верно


或者,可以使用 资源文件 定义布尔区域性特定字符串。

转换为布尔值

Boolean 结构将实现 IConvertible 接口。因此,您可以使用 Convert 类执行。Boolean 值和其他类型之间的转换原始 .NET Framework,或者可以调用 Boolean 结构的显式实现。 不过,Boolean 控件与以下类型之间的强制转换,不支持,以便相应转换方法将引发 InvalidCastException 异常:

从整型或浮点数的所有转换为布尔值转换非零值为 true 以及零值为 false。下面的示例通过调用 Convert.ToBoolean 选定的类重载阐释了这一点。


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


当转换从浮点值为布尔值,则转换方法执行一个具体的比较为零。 如果浮点值丢失精度,结果可能是意料之外的。 下例演示了此要求,其中 Double 变量应是零值转换为布尔值。 由于示例演示,结果为 true,因为 0.2 添加重复导致丢失精度。

当转换从布尔值到数值,Convert 类的转换方法将 true 转换为 1 并将 false 设置为 0。 但是,Visual Basic 转换函数将 true 转换为 (对于 255 到 Byte 值的转换) 或 -1 (对于其他数值转换)。 使用 Convert 方法,使用 Visual Basic 语言的转换运算符,下面的示例将 true 设置为值,并且,对于 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


有关从 Boolean 转换到的字符串值,请参见 格式布尔值 一节。 有关从字符串转换为 Boolean 值,请参见 分析布尔值 一节。

分析布尔值

Boolean 结构包含两种静态分析方法 ( ParseTryParse),将字符串转换为 Boolean 值。 布尔值的字符串表示形式因 TrueStringFalseString 字段值的大小写区分的等效定义,分别是“true”和“false”。 换言之,若要成功分析的字符串是“True”,“错误”,“true”,“错误的数组”或大小写混合等效。 不能成功分析数值字符串 (如“0 "或“1 " 在执行字符串比较时,前导或尾随空白视为。

下面的示例使用 ParseTryParse 方法分析大量字符串。 注意仅不区分大小写的相同“true”和“false”可以成功分析。


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'


如果您使用 Visual Basic 编程,可以使用 CBool 函数将数字转换的字符串表示形式为布尔值。“0 "转换为 false,这样,任何非零值的字符串表示形式转换为 true 如果在 Visual Basic 没有编程,则必须转换数字字符串到数字在转换之前对布尔。 下面的示例通过转换数组说明此整数为布尔值。


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


比较布尔值

由于布尔值是 truefalse,它具有一点原因显式调用 CompareTo 方法,指示实例是否大于,小于或等于指定值的最高速度。 通常,比较两个 Boolean 变量,您调用 Equals 方法或使用语言的相等运算符。

但是,在中,如果要比较与布尔值 truefalse的布尔变量,执行显式比较不必要,因为计算布尔值的结果是该布尔值。 例如,表达式


if (booleanValue) {



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.


等效,但第二更紧凑。 但是,这两种技术提供相当的性能。

二进制值为的布尔域使用

布尔值占一字节内存。 字节的低序位用于显示其值。 值 1 表示 true;值 0 表示 false

警告说明警告

可以使用 System.Collections.Specialized.BitVector32 结构与组布尔值。

可以将布尔值与该二进制表示形式通过调用 BitConverter.GetBytes(Boolean) 方法。 方法返回一个带有一个元素字节的数组。 若要还原其从二进制表示的布尔值,可调用 BitConverter.ToBoolean(Byte[], Int32) 方法。

下面的示例调用 BitConverter.GetBytes 方法转换布尔值与其表示二进制并显示值的位,然后调用 BitConverter.ToBoolean 方法还原其从二进制表示的值。


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


执行一个操作

本节说明如何在应用布尔值。 第一部分讨论其用作标志。 第二个演示其算术操作的使用。

a28wyd50.collapse_all(zh-cn,VS.110).gif布尔值用作标志

布尔变量通常用于为标志,这些里程碑体是否存在某种条件。 例如,在 String.Compare(String, String, Boolean) 方法中,最后参数,ignoreCase,是一的标志两字符串比较是否区分大小写 (ignoreCase 属于 true) 或区分大小写 (ignoreCasefalse)。 标志的值。条件语句可能再计算。

下面的示例使用一个简单的控制台应用演示如何使用布尔变量作为标记。 应用接受将启用重定向的输出到指定文件的命令行参数 ( /f 开关),因此,可以将的输出发送到指定的文件和控制台 ( /b 开关)。 应用标记定义了一个名为 isRedirected 的输出指示是否要发送到文件以及名为 isBoth 指示的标记应发送输出到控制台。


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");
   }
}


a28wyd50.collapse_all(zh-cn,VS.110).gif布尔域和算术运算

有时用于布尔值指示触发器一个数学计算条件的出现。 例如,一个 hasShippingCharge 变量是否可能用作标志指示 Add 运输成本发票保存到。

因为带有 false 值的操作不影响操作结果的效果,布尔转换为一个占用数学运算不必要的。 相反,您可以使用条件的逻辑。

下面的示例计算包括小计、成本费用服务交付和一个可选的数量。 hasServiceCharge 变量以确定服务费用是否适用。 不要转换为数值的 hasServiceCharge 和将其乘以量服务成本,示例使用条件逻辑添加服务费用总额,则适用。


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.


.NET Framework

受以下版本支持:4.5.2、4.5.1、4.5、4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持:4、3.5 SP1

可移植类库

受以下版本支持:可移植类库

适用于 Windows 应用商店应用的 .NET

受以下版本支持:Windows 8

适用于 Windows Phone 应用的 .NET

受以下版本支持:Windows Phone 8、Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带 SP1 或更高版本的服务器核心角色;不支持 Itanium)

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参阅.NET Framework 系统要求

此类型的所有成员都是线程安全的。 看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。 正如对任何其他类型一样,对于包含此类型的实例的共享变量,也必须通过锁定来保护对其进行的读写,以保证实现线程安全。

社区附加资源

添加
显示:
© 2014 Microsoft