Boolean 構造体
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ブール値 (true
または 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)
- 継承
- 属性
- 実装
注釈
インスタンス Boolean には、 または の 2 つの値のいずれかを指定 true
できます false
。
構造体 Boolean は、次のタスクをサポートするメソッドを提供します。
次のセクションでは、これらのタスクと他の使用状況の詳細について説明します。
ブール値の書式設定
の文字列形式は Boolean 、値の場合は "True"、値 true
の場合は "False" false
です。 値の文字列形式 Boolean は、読み取り専用フィールドと フィールドによって TrueString 定義 FalseString されます。
メソッドを使用 ToString して、ブール値を文字列に変換します。 ブール型構造体には、パラメーターレス メソッドと メソッドの 2 つのオーバーロードが含まれています。これには、書式設定を制御 ToString ToString() ToString(IFormatProvider) するパラメーターが含まれます。 ただし、このパラメーターは無視され、2 つのオーバーロードは同じ文字列を生成します。 メソッド 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
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
構造体には Boolean 2 つの値しか含めないので、カスタム書式設定を簡単に追加できます。 他の文字列リテラルが "True" と "False" に置き換わる単純なカスタム書式設定の場合は、C# の条件演算子や Visual BasicのIf演算子など、言語でサポートされている任意の条件付き評価機能を使用できます。 次の例では、この手法を使用して、値を Boolean "True" や "False" ではなく "Yes" および "No" として書式設定します。
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
カルチャに依存する書式設定など、より複雑なカスタム書式設定操作の場合は、 メソッドを呼び出して String.Format(IFormatProvider, String, Object[]) 実装を提供 ICustomFormatter できます。 次の例では、 インターフェイスと インターフェイスを実装して、英語 (米国)、フランス語 (フランス)、ロシア語 (ロシア) カルチャにカルチャに依存するブール文字列 ICustomFormatter IFormatProvider を提供します。
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': верно
必要に応じて、リソース ファイルを使用して カルチャ固有のブール文字列を定義できます。
ブール値への変換とブール値からの変換
構造体 Boolean は インターフェイスを実装 IConvertible します。 その結果、 クラスを使用して、.NET の値と他のプリミティブ型の間で変換を実行したり、構造体の明示的な実装を呼び Convert Boolean Boolean 出したりできます。 ただし、 型と次の型の間の変換はサポートされていないので、対応する変換 Boolean メソッドは例外をスロー InvalidCastException します。
と Boolean の Char 間の変換 (メソッド Convert.ToBoolean(Char) Convert.ToChar(Boolean) と メソッド)
と Boolean の DateTime 間の変換 (メソッド Convert.ToBoolean(DateTime) Convert.ToDateTime(Boolean) と メソッド)
整数または浮動小数点数からブール値への変換はすべて、0 以外の値を に変換し、0 の 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
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
ブール値から数値に変換する場合、クラスの変換メソッドは Convert 1 と true
false
0 に変換されます。 ただし、Visual Basic変換関数は、255 (値への変換の場合) または -1 (他のすべての数値変換の場合 true
Byte ) に変換されます。 次の例では、 メソッドを使用して数値に変換します。Visual Basic の場合は、Visual Basic 言語独自の変換演算子を true
Convert 使用します。
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)
から文字列値への Boolean 変換については、「ブール値の書式設定 」セクションを参照 してください。 文字列から値への変換については Boolean 、「ブール値の 解析」セクションを参照 してください。
ブール値の解析
構造体 Boolean には、文字列をブール値に変換する 2 つの静的解析メソッド と Parse TryParse が含まれています。 ブール値の文字列表現は、 フィールドと フィールドの値に相当する大文字と小文字を区別しないで定義されます。これは、それぞれ TrueString FalseString "True" と "False" です。 つまり、正常に解析される文字列は、"True"、"False"、"true"、"false"、または大文字と小文字が混在する文字列のみです。 "0" や "1" などの数値文字列を正常に解析することはできません。 文字列比較を実行する場合、先頭または末尾の空白文字は考慮されません。
次の例では、 メソッド Parse と メソッド TryParse を使用して、多数の文字列を解析します。 "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'
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'
メソッドでプログラミングする場合Visual Basic関数を使用して、数値の文字列形式をブール値 CBool
に変換できます。 "0" は に変換され、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
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
ブール値を比較する
ブール値は または のいずれかなので、 メソッドを明示的に呼び出す理由はほとんどありません。これは、インスタンスが指定した値より大きいか、小さいか、または等しいかを true
false
CompareTo 示します。 通常、2 つのブール変数を比較するには、 メソッドを呼び出すか、言語の等値 Equals 演算子を使用します。
ただし、ブール変数をリテラルブール値または と比較する場合は、ブール値を評価した結果がブール値なので、明示的な比較を行う必要はありません true
false
。 たとえば、式
if (booleanValue == true) {
If booleanValue = True Then
and
if (booleanValue) {
If booleanValue Then
は同等ですが、2 つ目の方がコンパクトです。 ただし、どちらの手法も同等のパフォーマンスを提供します。
ブール値をバイナリ値として使用する
ブール値として次の C# の例は 1 バイトのメモリを占有します。 例をコンパイルする必要があります、/unsafe
スイッチします。
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
バイトの低い順序のビットは、その値を表すのに使用されます。 値 1 は を表し、値 0 は true
を表します false
。
ヒント
構造体を使用して System.Collections.Specialized.BitVector32 、ブール値のセットを使用できます。
ブール値をバイナリ表現に変換するには、 メソッドを呼び出 BitConverter.GetBytes(Boolean) します。 メソッドは、1 つの要素を持つバイト配列を返します。 バイナリ表現からブール値を復元するには、 メソッドを呼び出 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
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
ブール値を使用して操作を実行する
このセクションでは、アプリでブール値がどのように使用されるのかについて説明します。 最初のセクションでは、フラグとしての使用について説明します。 2 つ目は、算術演算の使用を示しています。
フラグとしてのブール値
ブール変数は、一部の条件の有無を示すフラグとして最も一般的に使用されます。 たとえば、 メソッドの最後のパラメーター である は、2 つの文字列の比較で大文字と小文字が区別される ( が ) か、大文字と小文字が区別される ( が ) かを示す String.Compare(String, String, Boolean) ignoreCase
ignoreCase
true
ignoreCase
フラグです false
。 フラグの値は、条件付きステートメントで評価できます。
次の例では、単純なコンソール アプリを使用して、ブール変数をフラグとして使用する方法を示します。 アプリは、指定されたファイル (スイッチ) に出力をリダイレクトし、指定されたファイルとコンソール (スイッチ) の両方に出力を送信できるコマンド ライン パラメーターを受け取ります /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");
}
}
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
ブール値と算術演算
ブール値は、数学的計算をトリガーする条件の存在を示すために使用される場合があります。 たとえば、変数は、請求書の金額に配送料を追加するかどうかを示すフラグ hasShippingCharge
として機能する場合があります。
値を持つ操作は演算の結果に影響を与えないので、ブール値を整数値に変換して数学演算で使用する 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.
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.
ブール値と相互運用
基本データ型を COM にマーシャリングする方法は一般に簡単ですが、データ Boolean 型は例外です。 属性を適用 MarshalAsAttribute して、次の表現に Boolean 型をマーシャリングできます。
列挙型 | アンマネージド形式 |
---|---|
UnmanagedType.Bool | 4 バイト整数値。0 以外の値は を表し true 、0 は を表します false 。 これは、構造体内のフィールドの既定の形式であり、プラットフォーム呼び出し呼び出し Boolean Boolean のパラメーターです。 |
UnmanagedType.U1 | 1 バイト整数値。1 は を表し true 、0 は を表します false 。 |
UnmanagedType.VariantBool | 2 バイト整数値。-1 は を表し true 、0 は を表します false 。 これは、 Boolean COM 相互運用呼び出しのパラメーターの既定の形式です。 |
フィールド
FalseString |
ブール値の |
TrueString |
ブール値の |
メソッド
CompareTo(Boolean) |
このインスタンスと指定した Boolean オブジェクトを比較し、互いの関係を示す整数を返します。 |
CompareTo(Object) |
指定したオブジェクトとこのインスタンスを比較し、互いの関係を示す整数を返します。 |
Equals(Boolean) |
対象のインスタンスが、指定した Boolean オブジェクトに等しいかどうかを示す値を返します。 |
Equals(Object) |
このインスタンスが指定されたオブジェクトに等しいかどうかを示す値を返します。 |
GetHashCode() |
このインスタンスのハッシュ コードを返します。 |
GetTypeCode() |
Boolean 値の型の型コードを返します。 |
Parse(ReadOnlySpan<Char>) |
論理値の指定したスパン表現を、等価の Boolean 表現に変換します。 |
Parse(String) |
論理値の指定した文字列形式を、それと等価な Boolean に変換します。 |
ToString() |
このインスタンスの値をそれと等価な文字列形式に変換します ("True" または "False")。 |
ToString(IFormatProvider) |
このインスタンスの値をそれと等価な文字列形式に変換します ("True" または "False")。 |
TryFormat(Span<Char>, Int32) |
現在のブール型インスタンスの値を、指定した文字スパンに書式設定しようとします。 |
TryParse(ReadOnlySpan<Char>, Boolean) |
論理値の指定したスパン表現を、等価の Boolean に変換します。 |
TryParse(String, Boolean) |
論理値の指定した文字列形式を等価の Boolean に変換します。 |
明示的なインターフェイスの実装
適用対象
スレッド セーフ
この型のすべてのメンバーは、スレッドセーフです。 インスタンスの状態を変更するように見えるメンバーは、実際には新しい値で初期化された新しいインスタンスを返します。 他の型と同様に、この型のインスタンスを含む共有変数の読み取りと書き込みは、スレッドセーフを保証するためにロックによって保護される必要があります。