C#のbool型とは?true/falseの使い方・判定処理・初期値まで初心者向けに解説

はじめに

C#のbool型は、trueまたはfalseのどちらかを表すためのデータ型です。

プログラミングでは、「条件を満たしているか」「処理を実行してよいか」「値が存在するか」など、何かを判定する場面がよくあります。そのような判定結果を扱うときに使うのがbool型です。

たとえば、次のような場面でbool型はよく使われます。

C#
bool isAdult = true;
bool hasError = false;
bool canLogin = true;

isAdultは「成人かどうか」、hasErrorは「エラーがあるかどうか」、canLoginは「ログインできるかどうか」を表しています。

この記事では、C#のbool型について、true/falseの基本、条件分岐での使い方、初期値、bool?、実践的な使用例まで初心者向けにわかりやすく解説します。

1. C#のbool型とは?

1-1. bool型はtrue/falseの2値を扱うデータ型

C#のbool型は、論理値を扱うためのデータ型です。

bool型に入れられる値は、基本的に次の2つだけです。

C#
true
false

trueは「真」、falseは「偽」を意味します。

C#
bool isValid = true;
bool isDeleted = false;

この例では、isValidは「有効である」、isDeletedは「削除されている」という意味の変数です。

C#では、bool型に10を直接代入することはできません。

C#
bool flag = 1; // エラー

他の言語では1を真、0を偽として扱うことがありますが、C#ではbool型にはtrueまたはfalseを使います。

1-2. 条件分岐や判定処理でbool型がよく使われる理由

bool型は、条件分岐や判定処理でよく使われます。

たとえば、「年齢が20歳以上なら成人」と判定する場合、比較結果はbool型になります。

C#
int age = 20;
bool isAdult = age >= 20;

Console.WriteLine(isAdult);

この場合、age >= 20の結果はtrueになります。

bool型を使うと、判定結果に名前を付けられるため、コードの意味がわかりやすくなります。

C#
if (isAdult)
{
Console.WriteLine("成人です");
}

直接if (age >= 20)と書くこともできますが、isAdultという名前のbool変数にすると、「何を判定しているのか」が読み取りやすくなります。

1-3. boolとSystem.Booleanの違い

C#のboolは、実際にはSystem.Booleanの別名です。

次の2つはほぼ同じ意味です。

C#
bool isActive = true;
System.Boolean isEnabled = false;

通常のC#コードでは、boolを使うのが一般的です。

C#
bool hasValue = true;

System.Booleanは.NETの型名で、boolはC#で使いやすくするためのキーワードです。

初心者のうちは、基本的にboolを使えば問題ありません。

2. bool型の基本的な使い方

2-1. bool変数の宣言と代入方法

bool型の変数は、次のように宣言します。

C#
bool isLogin;

値を代入する場合は、trueまたはfalseを使います。

C#
bool isLogin = true;
bool hasError = false;

あとから値を変更することもできます。

C#
bool isLogin = false;

isLogin = true;

このように、bool型は状態の変化を表すときにも便利です。

2-2. trueとfalseの意味

C#におけるtruefalseは、条件の結果を表すキーワードです。

C#
bool isAvailable = true;
bool isEmpty = false;

trueは「条件を満たしている」、falseは「条件を満たしていない」と考えるとわかりやすいです。

たとえば、次のような意味になります。

C#
bool isMember = true;   // 会員である
bool isExpired = false; // 期限切れではない

変数名を工夫すると、truefalseの意味が自然に読めるようになります。

2-3. bool型の値をConsole.WriteLineで表示する

bool型の値は、Console.WriteLineで表示できます。

C#
bool isSuccess = true;

Console.WriteLine(isSuccess);

実行結果は次のようになります。

True

C#のコード上ではtruefalseと小文字で書きますが、Console.WriteLineで表示するとTrueFalseのように先頭が大文字になります。

C#
bool isSuccess = false;

Console.WriteLine(isSuccess);

実行結果は次の通りです。

False

3. bool型を使った条件分岐

3-1. if文でbool型を判定する基本

bool型は、if文の条件式としてそのまま使えます。

C#
bool isLogin = true;

if (isLogin)
{
Console.WriteLine("ログインしています");
}

isLogintrueの場合、if文の中の処理が実行されます。

falseの場合は実行されません。

C#
bool isLogin = false;

if (isLogin)
{
Console.WriteLine("ログインしています");
}

この場合、何も表示されません。

3-2. bool型を使ったif/elseの書き方

bool型は、if/else文でもよく使います。

C#
bool isLogin = false;

if (isLogin)
{
Console.WriteLine("ログインしています");
}
else
{
Console.WriteLine("ログインしていません");
}

実行結果は次のようになります。

ログインしていません

bool変数がtrueならif側、falseならelse側が実行されます。

3-3. true/falseを直接比較しない読みやすい書き方

初心者のうちは、次のように書きたくなることがあります。

C#
if (isLogin == true)
{
Console.WriteLine("ログインしています");
}

この書き方は間違いではありません。

しかし、isLogin自体がすでにbool型なので、次のように書く方が一般的で読みやすいです。

C#
if (isLogin)
{
Console.WriteLine("ログインしています");
}

falseかどうかを判定したい場合は、!を使います。

C#
if (!isLogin)
{
Console.WriteLine("ログインしていません");
}

!は「ではない」という意味の論理演算子です。

つまり、!isLoginは「ログインしていない場合」という意味になります。

3-4. 条件式の結果をbool変数に代入する方法

比較演算子を使った条件式の結果は、bool型になります。

C#
int score = 80;

bool isPassed = score >= 60;

この場合、score >= 60の結果はtrueです。

そのため、isPassedにはtrueが代入されます。

C#
if (isPassed)
{
Console.WriteLine("合格です");
}

条件式をbool変数に入れると、後続の処理で何度も使えるようになります。

C#
int age = 25;
bool isAdult = age >= 20;

if (isAdult)
{
Console.WriteLine("成人向けの処理を実行します");
}

4. bool型でよく使う比較演算子・論理演算子

4-1. 比較演算子の結果はbool型になる

C#では、比較演算子を使った式の結果はbool型になります。

C#
int x = 10;
int y = 20;

bool result = x < y;

x < yは「xはyより小さいか」を判定しています。

この例では10 < 20なので、resultにはtrueが入ります。

C#
Console.WriteLine(result);

実行結果は次の通りです。

True

4-2. ==・!=・>・<・>=・<=の使い方

C#でよく使う比較演算子には、次のようなものがあります。

演算子意味
==等しい
!=等しくない
>より大きい
<より小さい
>=以上
<=以下

使用例を見てみましょう。

C#
int age = 18;

bool isEqual = age == 18;
bool isNotEqual = age != 20;
bool isGreater = age > 15;
bool isLess = age < 20;
bool isGreaterOrEqual = age >= 18;
bool isLessOrEqual = age <= 18;

それぞれの結果は、すべてtrueまたはfalseになります。

C#
Console.WriteLine(isEqual);          // True
Console.WriteLine(isNotEqual); // True
Console.WriteLine(isGreater); // True
Console.WriteLine(isLess); // True
Console.WriteLine(isGreaterOrEqual); // True
Console.WriteLine(isLessOrEqual); // True

文字列の比較でも==!=を使えます。

C#
string name = "Taro";

bool isTaro = name == "Taro";
bool isHanako = name == "Hanako";

Console.WriteLine(isTaro); // True
Console.WriteLine(isHanako); // False

4-3. &&・||・!を使った複数条件の判定

複数の条件を組み合わせるときは、論理演算子を使います。

演算子意味
&&かつ
`
!ではない

たとえば、「年齢が20歳以上、かつ会員である」場合を判定するには、&&を使います。

C#
int age = 25;
bool isMember = true;

if (age >= 20 && isMember)
{
Console.WriteLine("成人会員です");
}

&&は、両方の条件がtrueのときだけ全体がtrueになります。

「会員である、またはクーポンを持っている」場合は、||を使います。

C#
bool isMember = false;
bool hasCoupon = true;

if (isMember || hasCoupon)
{
Console.WriteLine("割引対象です");
}

||は、どちらか一方でもtrueなら全体がtrueになります。

!は、条件を反転します。

C#
bool isDeleted = false;

if (!isDeleted)
{
Console.WriteLine("削除されていないデータです");
}

4-4. 論理演算子を使うときの注意点

論理演算子を使うと、条件式が長くなりすぎることがあります。

C#
if (age >= 20 && isMember && !isDeleted && hasPermission)
{
Console.WriteLine("処理を実行します");
}

この程度であれば読めますが、条件が増えると意味がわかりにくくなります。

その場合は、bool変数に分けると読みやすくなります。

C#
bool isAdult = age >= 20;
bool canAccess = isMember && !isDeleted && hasPermission;

if (isAdult && canAccess)
{
Console.WriteLine("処理を実行します");
}

また、&&||には短絡評価という特徴があります。

&&では、左側がfalseなら右側は評価されません。

C#
if (user != null && user.IsActive)
{
Console.WriteLine("有効なユーザーです");
}

この場合、user != nullfalseなら、user.IsActiveは評価されません。

そのため、null参照を避けるためにもよく使われます。

5. bool型の初期値と既定値

5-1. bool型の既定値はfalse

C#のbool型の既定値はfalseです。

C#
bool defaultValue = default(bool);

Console.WriteLine(defaultValue);

実行結果は次のようになります。

False

default(bool)を使うと、bool型の既定値を取得できます。

5-2. フィールド・配列・ローカル変数での初期値の違い

bool型の初期値を考えるときは、変数がどこで宣言されているかが重要です。

クラスのフィールドとして宣言した場合、明示的に代入しなくてもfalseで初期化されます。

C#
class User
{
private bool isActive;

public void Show()
{
Console.WriteLine(isActive);
}
}

この場合、isActiveの初期値はfalseです。

配列の要素も、bool型であれば初期値はfalseになります。

C#
bool[] flags = new bool[3];

Console.WriteLine(flags[0]);
Console.WriteLine(flags[1]);
Console.WriteLine(flags[2]);

実行結果は次の通りです。

False
False
False

一方で、メソッド内で宣言するローカル変数は注意が必要です。

C#
void Test()
{
bool isActive;
Console.WriteLine(isActive); // エラー
}

ローカル変数は、自動的に使える状態になるわけではありません。

使用する前に必ず値を代入する必要があります。

5-3. 初期化していないローカル変数で起きるエラー

C#では、初期化していないローカル変数を使おうとするとコンパイルエラーになります。

C#
void Test()
{
bool isSuccess;

if (isSuccess)
{
Console.WriteLine("成功しました");
}
}

このコードは、isSuccessに値が代入されていないためエラーになります。

正しくは、次のように初期値を代入します。

C#
void Test()
{
bool isSuccess = false;

if (isSuccess)
{
Console.WriteLine("成功しました");
}
}

初心者のうちは、bool変数を宣言するときに初期値も一緒に書く習慣をつけると安心です。

C#
bool hasError = false;
bool isCompleted = false;
bool canSubmit = true;

6. nullable bool(bool?)とは?

6-1. bool?はtrue・false・nullを扱える型

通常のbool型は、trueまたはfalseしか扱えません。

しかし、C#にはbool?という型があります。

C#
bool? answer = null;

bool?は、次の3つの値を扱えます。

C#
true
false
null

nullは「値がない」「未設定」「不明」といった状態を表します。

たとえば、アンケートの回答で「はい」「いいえ」「未回答」を表したい場合、bool?が使えます。

C#
bool? agreed = null;

この場合、agreedはまだ回答されていない状態を表せます。

6-2. boolとbool?の違い

boolbool?の大きな違いは、nullを扱えるかどうかです。

C#
bool isActive = false;
bool? isConfirmed = null;

boolは必ずtruefalseになります。

一方、bool?trueでもfalseでもなく、nullになることがあります。

C#
bool? result = null;

Console.WriteLine(result.HasValue);

HasValueを使うと、値が入っているかどうかを確認できます。

C#
if (result.HasValue)
{
Console.WriteLine(result.Value);
}
else
{
Console.WriteLine("値がありません");
}

ただし、Valueは値が入っていない状態で使うと例外が発生するため、先にHasValueで確認するのが安全です。

6-3. bool?をif文で扱うときの注意点

bool?は、そのままif文の条件として使えません。

C#
bool? isActive = true;

if (isActive) // エラー
{
Console.WriteLine("有効です");
}

bool?truefalsenullの3つの状態を持つため、C#はそのまま条件として判断できません。

bool?if文で使う場合は、次のように書きます。

C#
bool? isActive = true;

if (isActive == true)
{
Console.WriteLine("有効です");
}

この書き方なら、isActivetrueの場合だけ処理されます。

falsenullの場合は処理されません。

C#
bool? isActive = null;

if (isActive == true)
{
Console.WriteLine("有効です");
}
else
{
Console.WriteLine("有効ではない、または不明です");
}

6-4. null合体演算子を使った安全な判定方法

bool?を安全に扱う方法として、null合体演算子??があります。

C#
bool? isActive = null;

bool result = isActive ?? false;

この場合、isActivenullならfalseとして扱います。

C#
if (isActive ?? false)
{
Console.WriteLine("有効です");
}
else
{
Console.WriteLine("有効ではありません");
}

??を使うと、nullの場合の扱いを明確にできます。

たとえば、「同意している場合だけ処理したい」という場合は、次のように書けます。

C#
bool? agreed = null;

if (agreed == true)
{
Console.WriteLine("同意済みです");
}
else
{
Console.WriteLine("未同意または未回答です");
}

または、nullfalseとして扱うなら次のように書けます。

C#
if (agreed ?? false)
{
Console.WriteLine("同意済みです");
}

7. bool型の実践的な使用例

7-1. 入力チェックの結果をboolで返す

bool型は、入力値が正しいかどうかを判定する処理でよく使います。

C#
static bool IsValidName(string name)
{
return !string.IsNullOrWhiteSpace(name);
}

このメソッドは、nameが空文字や空白でなければtrueを返します。

使う側は次のように書けます。

C#
string name = "Taro";

if (IsValidName(name))
{
Console.WriteLine("有効な名前です");
}
else
{
Console.WriteLine("名前を入力してください");
}

判定処理をメソッドにすると、コードの意味がわかりやすくなります。

7-2. メソッドの戻り値としてboolを使う

メソッドの戻り値としてboolを使うと、「成功したか」「条件を満たしたか」を呼び出し元に伝えられます。

C#
static bool CanBuy(int age)
{
return age >= 18;
}

このメソッドは、年齢が18歳以上ならtrueを返します。

C#
int age = 20;

if (CanBuy(age))
{
Console.WriteLine("購入できます");
}
else
{
Console.WriteLine("購入できません");
}

boolを戻り値にするメソッドは、IsHasCanなどで始めると意味がわかりやすくなります。

C#
bool IsAdult(int age)
{
return age >= 20;
}

bool HasPermission(string role)
{
return role == "Admin";
}

bool CanLogin(bool isLocked)
{
return !isLocked;
}

7-3. フラグ変数として状態を管理する

bool型は、状態を管理するフラグ変数としても使われます。

C#
bool isRunning = true;

while (isRunning)
{
Console.WriteLine("処理中です");

isRunning = false;
}

この例では、isRunningtrueの間だけ処理を続けます。

また、処理が完了したかどうかを表す場合にも使えます。

C#
bool isCompleted = false;

// 何らかの処理
isCompleted = true;

if (isCompleted)
{
Console.WriteLine("処理が完了しました");
}

フラグ変数は便利ですが、増えすぎると状態管理が複雑になります。

そのため、boolだけで表現しにくい状態が増えてきた場合は、enumなど別の方法を検討するとよいです。

7-4. TryParseでbool型の結果を受け取る

C#では、文字列を数値などに変換するときにTryParseがよく使われます。

TryParseの戻り値はbool型です。

C#
string text = "123";

bool success = int.TryParse(text, out int number);

if (success)
{
Console.WriteLine($"変換成功: {number}");
}
else
{
Console.WriteLine("変換失敗");
}

int.TryParseは、変換に成功した場合はtrueを返し、失敗した場合はfalseを返します。

bool型そのものにもTryParseがあります。

C#
string text = "true";

bool success = bool.TryParse(text, out bool result);

if (success)
{
Console.WriteLine(result);
}
else
{
Console.WriteLine("bool型に変換できません");
}

このように、boolは「処理が成功したかどうか」を受け取る場面でもよく使われます。

8. bool型で初心者がつまずきやすいポイント

8-1. true/falseを文字列として扱ってしまう

初心者がよく間違えるのが、truefalseを文字列として扱ってしまうことです。

C#
bool isActive = "true"; // エラー

"true"は文字列です。

一方、truebool型の値です。

正しくは次のように書きます。

C#
bool isActive = true;

文字列の"true""false"boolに変換したい場合は、bool.Parsebool.TryParseを使います。

C#
string text = "true";

bool isActive = bool.Parse(text);

安全に変換したい場合は、TryParseを使う方がよいです。

C#
string text = "true";

if (bool.TryParse(text, out bool isActive))
{
Console.WriteLine(isActive);
}
else
{
Console.WriteLine("変換できませんでした");
}

8-2. =と==を間違える

C#では、===は意味が違います。

=は代入です。

C#
bool isActive = true;

==は比較です。

C#
bool result = isActive == true;

特にif文で次のように書いてしまうと、意図しない動きになることがあります。

C#
bool isActive = false;

if (isActive = true)
{
Console.WriteLine("有効です");
}

このコードでは、isActivetrueを代入しています。

その結果、条件は常にtrueになります。

正しく比較するなら次のように書きます。

C#
if (isActive == true)
{
Console.WriteLine("有効です");
}

ただし、bool型の場合は次のように書く方が自然です。

C#
if (isActive)
{
Console.WriteLine("有効です");
}

falseを判定する場合は次のように書きます。

C#
if (!isActive)
{
Console.WriteLine("無効です");
}

8-3. 条件式が複雑になりすぎる

複数の条件を一度に書きすぎると、読みづらいコードになります。

C#
if ((age >= 20 && isMember && !isDeleted) || (hasCoupon && isFirstTimeUser))
{
Console.WriteLine("割引対象です");
}

このような条件式は、後から読んだときに意味を理解しづらくなります。

bool変数に分けると、読みやすくなります。

C#
bool isRegularTarget = age >= 20 && isMember && !isDeleted;
bool isCampaignTarget = hasCoupon && isFirstTimeUser;

if (isRegularTarget || isCampaignTarget)
{
Console.WriteLine("割引対象です");
}

さらに、条件に意味がある場合はメソッド化するのもおすすめです。

C#
static bool IsDiscountTarget(int age, bool isMember, bool isDeleted)
{
return age >= 20 && isMember && !isDeleted;
}

8-4. bool型の命名で意味がわかりにくくなる

bool型は、変数名がとても重要です。

次のような名前だと、trueのときに何を意味するのかがわかりにくくなります。

C#
bool check;
bool flag;
bool status;

一方で、次のような名前なら意味がはっきりします。

C#
bool isChecked;
bool hasError;
bool canSubmit;

bool型の変数名は、trueのときに自然に読める名前にするのがコツです。

C#
if (hasError)
{
Console.WriteLine("エラーがあります");
}

このように、if文に入れたときに文章として読める名前にすると、コードがわかりやすくなります。

9. bool型をわかりやすく使うコツ

9-1. is・has・canなどを使った変数名にする

bool型の変数名には、次のような接頭辞を使うと意味が伝わりやすくなります。

接頭辞意味
is〜であるisActive, isValid
has〜を持っているhasError, hasPermission
can〜できるcanLogin, canSubmit
should〜すべきshouldRetry, shouldSave
contains〜を含むcontainsKeyword

たとえば、次のように書くと意味が明確です。

C#
bool isActive = true;
bool hasPermission = false;
bool canLogin = isActive && hasPermission;

if文でも自然に読めます。

C#
if (canLogin)
{
Console.WriteLine("ログインできます");
}

9-2. 否定形の変数名を避ける

bool型では、否定形の変数名を使うと条件式が読みにくくなることがあります。

C#
bool isNotDeleted = true;

if (!isNotDeleted)
{
Console.WriteLine("削除済みです");
}

!isNotDeletedのように否定が重なると、意味を理解しにくくなります。

できるだけ肯定形の名前にしましょう。

C#
bool isDeleted = false;

if (isDeleted)
{
Console.WriteLine("削除済みです");
}
else
{
Console.WriteLine("削除されていません");
}

肯定形の変数名にすると、trueの意味がはっきりします。

9-3. 条件式をメソッド化して読みやすくする

条件式が長くなる場合は、メソッドに分けると読みやすくなります。

C#
if (age >= 20 && hasPermission && !isLocked)
{
Console.WriteLine("利用できます");
}

この条件式をメソッド化すると、次のようになります。

C#
static bool CanUseService(int age, bool hasPermission, bool isLocked)
{
return age >= 20 && hasPermission && !isLocked;
}

呼び出し側はシンプルになります。

C#
if (CanUseService(age, hasPermission, isLocked))
{
Console.WriteLine("利用できます");
}

条件式に名前を付けることで、「何を判定しているのか」が明確になります。

9-4. bool型を使うべき場面・使わない方がよい場面

bool型は、2択の状態を表す場合に向いています。

たとえば、次のような状態です。

C#
bool isActive;
bool hasError;
bool canLogin;
bool isCompleted;

これらは、trueまたはfalseで自然に表せます。

一方で、状態が3つ以上ある場合はboolだけで表すとわかりにくくなります。

C#
bool isPending;
bool isApproved;
bool isRejected;

このように複数のboolで状態を管理すると、矛盾した状態が生まれる可能性があります。

C#
isApproved = true;
isRejected = true;

承認済みであり、却下済みでもあるという不自然な状態になってしまいます。

このような場合は、enumを使う方が適しています。

C#
enum ApprovalStatus
{
Pending,
Approved,
Rejected
}
C#
ApprovalStatus status = ApprovalStatus.Pending;

bool型は便利ですが、何でもboolで表せばよいわけではありません。

「はい・いいえ」「できる・できない」「ある・ない」のように、2択で表せる場面に使うのが基本です。

まとめ

C#のbool型は、trueまたはfalseの2値を扱うための基本的なデータ型です。

条件分岐、比較演算、論理演算、入力チェック、メソッドの戻り値、フラグ管理など、多くの場面で使われます。

bool型を使うときは、次のポイントを押さえておくと理解しやすくなります。

ポイント内容
bool型の値trueまたはfalse
既定値false
よく使う場面条件分岐、判定処理、フラグ管理
bool?truefalsenullを扱える
変数名のコツishascanなどを使う
注意点===の違い、文字列の"true"との違い

bool型はシンプルな型ですが、コードの読みやすさに大きく影響します。

特に、変数名をわかりやすくすること、条件式を複雑にしすぎないこと、true/falseの意味が自然に伝わるように書くことが大切です。

C#を学び始めたばかりの方は、まずはif文と組み合わせてbool型を使う練習をしてみましょう。