C#のboolをToStringで文字列変換する方法|True/Falseを小文字にする方法も解説

はじめに

C#でboolを文字列に変換したい場合、もっとも基本的な方法はToString()を使うことです。たとえばtrue.ToString()false.ToString()のように書くと、bool値を文字列として扱えるようになります。

ただし、C#のbool.ToString()には知っておきたい注意点があります。戻り値は"true""false"ではなく、先頭が大文字の"True""False"になります。XML、JSON、CSV、ログ出力などで小文字のtrue/falseが必要な場合は、そのまま使うと期待と異なる結果になることがあります。

この記事では、C#のboolToString()で文字列変換する基本から、小文字のtrue/falseにする方法、任意の文字列に変換する方法、bool?Parse/TryParseの注意点まで解説します。

1. C#のboolをToStringで文字列に変換する基本

1-1. bool.ToString()の使い方と基本構文

C#のbool型は、真偽値を表す型です。値はtrueまたはfalseのどちらかです。boolは.NETのSystem.Boolean構造体のエイリアスとして定義されています。Microsoft Learn

bool値を文字列に変換するには、次のようにToString()を呼び出します。

C#
bool isActive = true;

string text = isActive.ToString();
Console.WriteLine(text);

ToString()は、値を文字列として扱いたいときに使う基本的なメソッドです。Console.WriteLineで表示するだけなら明示的にToString()を書かなくても表示できますが、変換後の文字列を変数に入れたい場合や、文字列連結・ログ出力・ファイル出力で使いたい場合にはToString()を使うと意図が分かりやすくなります。

1-2. true.ToString()とfalse.ToString()の戻り値

true.ToString()の戻り値は"True"です。false.ToString()の戻り値は"False"です。

C#
string trueText = true.ToString();
string falseText = false.ToString();

Console.WriteLine(trueText);
Console.WriteLine(falseText);

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

True
False

ここで重要なのは、戻り値がC#のリテラル表記であるtrue/falseとは異なる点です。C#のコード上では小文字でtruefalseと書きますが、ToString()で文字列にすると先頭が大文字になります。

1-3. ToString()で返される文字列は「True」「False」になる

Boolean.ToString()は、現在のbool値を等価な文字列表現に変換します。戻り値はtrueの場合に"True"falseの場合に"False"です。これはBoolean.ToString()の仕様として定義されています。Microsoft Learn

そのため、次のようなコードでは、text == "true"は成立しません。

C#
bool flag = true;
string text = flag.ToString();

Console.WriteLine(text == "true");
Console.WriteLine(text == "True");

実行結果は次のとおりです。

False
True

bool.ToString()の結果を条件判定に使う場合は、大文字・小文字の違いを意識する必要があります。

1-4. 実際のコード例と実行結果

次のサンプルでは、boolの値をToString()で文字列に変換し、型と値を確認しています。

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

string publishedText = isPublished.ToString();
string deletedText = isDeleted.ToString();

Console.WriteLine(publishedText);
Console.WriteLine(deletedText);

Console.WriteLine(publishedText.GetType().Name);
Console.WriteLine(deletedText.GetType().Name);

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

True
False
String
String

boolだった値が、ToString()によってstring型の"True""False"に変換されていることが分かります。

2. bool.ToString()が「true」「false」ではなく「True」「False」になる理由

2-1. Boolean.ToString()の仕様

C#で使うboolは、実体としては.NETのSystem.Booleanです。bool.ToString()System.Boolean.ToString()を呼び出していると考えると理解しやすくなります。

Boolean.ToString()は、値がtrueならTrueStringに対応する文字列を返し、値がfalseならFalseStringに対応する文字列を返します。つまり、C#のキーワードとしてのtrue/falseをそのまま文字列化しているのではなく、.NETのBoolean型で定義された文字列表現を返しているということです。Microsoft Learn

2-2. TrueStringとFalseStringの戻り値

Booleanには、真を表す文字列としてTrueString、偽を表す文字列としてFalseStringがあります。これらの値はそれぞれ"True""False"です。

そのため、次のように比較するとtrueになります。

C#
Console.WriteLine(true.ToString() == bool.TrueString);
Console.WriteLine(false.ToString() == bool.FalseString);

実行結果は次のとおりです。

True
True

bool.ToString()の結果が"True""False"になるのは、TrueStringFalseStringに基づく仕様だからです。

2-3. C#のboolリテラルtrue/falseとの違い

C#のコードで使うtruefalseは、bool値を表すリテラルです。一方、"True""False"は文字列です。

C#
bool flag = true;        // boolリテラル
string text = "True"; // 文字列

trueは条件式や論理演算に使う値です。"True"は文字列なので、そのままif文の条件には使えません。

C#
bool flag = true;

if (flag)
{
Console.WriteLine("trueです");
}

次のようなコードは、stringを条件式として扱おうとしているためコンパイルできません。

C#
string text = "True";

// if (text) // コンパイルエラー
// {
// }

bool値と文字列は別物として扱いましょう。

2-4. 文字列比較で大文字・小文字に注意すべき理由

bool.ToString()の結果を文字列比較に使う場合、"True""true"は通常の比較では別の文字列として扱われます。

C#
string text = true.ToString();

Console.WriteLine(text == "true"); // False
Console.WriteLine(text == "True"); // True

外部API、設定ファイル、CSV、XMLなどでは、小文字のtrue/falseを期待するケースがあります。そのような場面でbool.ToString()の結果をそのまま出力すると、仕様と合わない可能性があります。

大文字・小文字を区別せずに比較したい場合は、ToLower()で変換してから比較するよりも、StringComparison.OrdinalIgnoreCaseなどを使うほうが意図が明確です。

C#
string text = "true";

if (string.Equals(text, "True", StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine("trueとして扱えます");
}

3. boolのToString結果を小文字のtrue/falseに変換する方法

3-1. ToLower()を使って小文字にする方法

bool.ToString()の結果を小文字にしたい場合は、ToLower()を使えます。

C#
bool flag = true;

string text = flag.ToString().ToLower();

Console.WriteLine(text);

実行結果は次のとおりです。

true

falseの場合も同様です。

C#
bool flag = false;

string text = flag.ToString().ToLower();

Console.WriteLine(text);

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

false

ToLower()を使えば簡単に小文字化できますが、カルチャの影響を受ける可能性があるため、機械的な出力形式としてtrue/falseを作りたい場合はToLowerInvariant()のほうが適しています。

3-2. ToLowerInvariant()を使うべきケース

XML、設定ファイル、外部システム連携など、文化圏に依存しない固定形式の文字列を作る場合は、ToLowerInvariant()を使うのがおすすめです。

C#
bool flag = true;

string text = flag.ToString().ToLowerInvariant();

Console.WriteLine(text);

実行結果は次のとおりです。

true

ToLowerInvariant()は、現在のカルチャ設定に依存しない小文字変換を行います。bool.ToString()の結果は"True"または"False"なので、英字の小文字化だけなら大きな違いが出にくいものの、フォーマット用途ではInvariantを使う習慣が安全です。

特にXMLへ出力する場合、.NETの公式ドキュメントでも、Boolean.ToString()の結果を書き出す前にToLowerInvariant()を呼び出して小文字にする方法が示されています。Microsoft Learn

3-3. XMLやJSON出力で小文字が必要になるケース

XML Schemaのboolean値やJSONのboolean値では、一般的に小文字のtrue/falseが使われます。bool.ToString()"True"/"False"を返すため、そのままXMLの値として書き込むと期待する形式と異なる場合があります。

XML向けに小文字の値を作るなら、次のように書けます。

C#
bool enabled = true;

string xmlValue = enabled.ToString().ToLowerInvariant();

Console.WriteLine($"<enabled>{xmlValue}</enabled>");

実行結果は次のとおりです。

<enabled>true</enabled>

一方、JSONを作る場合は、文字列連結でToString()するのではなく、System.Text.JsonなどのJSONシリアライザーを使うのが基本です。System.Text.Jsonには、多くのプリミティブ型に対応する組み込みコンバーターがあります。Microsoft Learn

3-4. true/falseを小文字で出力するコード例

小文字のtrue/falseを出力したい場合は、次のように共通処理にしておくと便利です。

C#
bool isEnabled = true;
bool isVisible = false;

string enabledText = isEnabled.ToString().ToLowerInvariant();
string visibleText = isVisible.ToString().ToLowerInvariant();

Console.WriteLine(enabledText);
Console.WriteLine(visibleText);

実行結果は次のとおりです。

true
false

より明示的に書きたい場合は、三項演算子を使う方法もあります。

C#
bool isEnabled = true;

string text = isEnabled ? "true" : "false";

Console.WriteLine(text);

ToString().ToLowerInvariant()でも問題ありませんが、出力したい文字列が完全に決まっている場合は、三項演算子のほうが処理内容を読み取りやすいこともあります。

4. boolを任意の文字列に変換する方法

4-1. 三項演算子で「はい/いいえ」に変換する

画面表示や帳票出力では、"True"/"False"よりも"はい"/"いいえ"のほうが分かりやすい場合があります。そのような場合は、ToString()ではなく三項演算子を使うと簡潔です。

C#
bool isMember = true;

string displayText = isMember ? "はい" : "いいえ";

Console.WriteLine(displayText);

実行結果は次のとおりです。

はい

三項演算子は、条件 ? trueの場合 : falseの場合の形で書きます。boolの値に応じて表示文言を切り替えたいときに向いています。

4-2. if文で条件ごとに文字列を分ける

条件に応じた処理が複雑な場合は、三項演算子よりもif文のほうが読みやすくなります。

C#
bool isCompleted = false;
string statusText;

if (isCompleted)
{
statusText = "完了";
}
else
{
statusText = "未完了";
}

Console.WriteLine(statusText);

実行結果は次のとおりです。

未完了

単純な変換なら三項演算子、処理が増えるならif文というように使い分けるとよいでしょう。

4-3. 拡張メソッドでbool変換処理を共通化する

同じようなbool変換を複数箇所で使う場合は、拡張メソッドにして共通化できます。

C#
public static class BoolExtensions
{
public static string ToYesNo(this bool value)
{
return value ? "はい" : "いいえ";
}

public static string ToLowerString(this bool value)
{
return value ? "true" : "false";
}
}

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

C#
bool isActive = true;

Console.WriteLine(isActive.ToYesNo());
Console.WriteLine(isActive.ToLowerString());

実行結果は次のとおりです。

はい
true

拡張メソッドにしておくと、画面表示、CSV出力、ログ出力などで変換ルールを統一しやすくなります。

4-4. 表示用の文言と内部値を分けて扱う考え方

boolを文字列に変換するときは、「内部的な値」と「ユーザーに見せる文言」を分けて考えることが大切です。

内部処理ではtrue/falseのまま扱い、表示する直前に"はい"/"いいえ""有効"/"無効"へ変換するほうが安全です。早い段階で文字列にしてしまうと、後続処理で再びboolに戻す必要が出たり、比較ミスが発生したりします。

たとえば、次のように表示用プロパティを別に用意する方法もあります。

C#
public class UserViewModel
{
public bool IsActive { get; set; }

public string IsActiveText => IsActive ? "有効" : "無効";
}

このようにしておけば、内部値はboolとして保持しながら、画面では分かりやすい文字列を表示できます。

5. bool.ToString()を使うときの注意点

5-1. ToString()にはbool用の書式指定がない

数値や日付のToString()では、書式指定文字列を使って表示形式を変えられます。たとえば数値ならToString("N0")、日付ならToString("yyyy-MM-dd")のような指定が可能です。

しかし、boolToString()では、"true"/"false"の小文字化や"はい"/"いいえ"のような独自形式を、書式指定だけで直接指定することはできません。

C#
bool flag = true;

string text = flag.ToString(); // "True"

小文字にしたい場合はToLowerInvariant()、任意の文言にしたい場合は三項演算子や拡張メソッドを使いましょう。

5-2. IFormatProviderを指定してもカルチャ依存の変換はされない

Boolean.ToString(IFormatProvider)というオーバーロードもありますが、providerパラメーターは予約済みであり、実行には関与しません。そのため、カルチャを指定しても"True"/"False"という結果がローカライズされるわけではありません。Microsoft Learn

C#
using System.Globalization;

bool flag = true;

string text = flag.ToString(CultureInfo.GetCultureInfo("ja-JP"));

Console.WriteLine(text);

実行結果は次のとおりです。

True

日本語環境だから"真""はい"になる、ということはありません。表示用の文言に変換したい場合は、自分で変換ロジックを用意する必要があります。

5-3. 文字列比較ではStringComparisonを使う

bool.ToString()の結果を文字列比較する場合は、大文字・小文字の違いで判定がずれることがあります。大文字・小文字を区別しない比較が必要な場合は、StringComparisonを指定しましょう。

C#
string text = "true";

bool result = string.Equals(
text,
"True",
StringComparison.OrdinalIgnoreCase
);

Console.WriteLine(result);

実行結果は次のとおりです。

True

単純にtext.ToLower() == "true"のように書くこともできますが、比較の意図を明確にするならStringComparison.OrdinalIgnoreCaseを使う方法が読みやすく、余計な文字列生成も避けられます。

5-4. null許容bool(bool?)でToString()を使う場合の注意

C#では、bool?を使うとtruefalsenullの3状態を表せます。データベースの値や未選択状態を扱う場合によく使われます。

C#
bool? flag1 = true;
bool? flag2 = false;
bool? flag3 = null;

Console.WriteLine(flag1.ToString());
Console.WriteLine(flag2.ToString());
Console.WriteLine($"[{flag3.ToString()}]");

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

True
False
[]

Nullable<T>.ToString()は、値を持っている場合はその値の文字列表現を返し、値を持っていない場合は空文字列を返します。つまり、bool?nullのときにToString()を呼ぶと、"null"ではなく""になります。Microsoft Learn

nullを明示的に"未設定"などで表示したい場合は、次のように分岐します。

C#
bool? flag = null;

string text = flag.HasValue
? flag.Value.ToString()
: "未設定";

Console.WriteLine(text);

実行結果は次のとおりです。

未設定

6. 文字列をboolに戻す方法

6-1. bool.Parse()で文字列をboolに変換する

文字列をboolに戻したい場合は、bool.Parse()を使えます。

C#
string text = "True";

bool flag = bool.Parse(text);

Console.WriteLine(flag);

実行結果は次のとおりです。

True

Boolean.Parseは、文字列形式の論理値をBooleanに変換するメソッドです。変換対象の文字列はTrueStringまたはFalseStringに相当する必要があり、比較は大文字・小文字を区別しません。Microsoft Learn

6-2. bool.TryParse()で安全に変換する

ユーザー入力や外部ファイルなど、変換できるか分からない文字列を扱う場合は、bool.Parse()よりもbool.TryParse()が安全です。

C#
string text = "true";

if (bool.TryParse(text, out bool result))
{
Console.WriteLine($"変換成功: {result}");
}
else
{
Console.WriteLine("変換できません");
}

実行結果は次のとおりです。

変換成功: True

TryParse()は変換に成功するとtrueを返し、変換結果をout引数に格納します。失敗した場合も例外を投げず、戻り値がfalseになります。Microsoft Learn

6-3. 「true」「false」「True」「False」は変換できるのか

bool.Parse()bool.TryParse()は、大文字・小文字を区別しないため、"true""false""True""False"はいずれも変換できます。

C#
string[] values = { "true", "false", "True", "False", "TRUE", "FALSE" };

foreach (string value in values)
{
bool result = bool.Parse(value);
Console.WriteLine($"{value} -> {result}");
}

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

true -> True
false -> False
True -> True
False -> False
TRUE -> True
FALSE -> False

ただし、"1""0""yes""no"は標準のbool.Parse()では変換できません。これらを扱う場合は、独自の変換処理を用意する必要があります。

6-4. 変換できない文字列を扱うときのエラー対策

bool.Parse()は、変換できない文字列を渡すと例外が発生します。

C#
string text = "yes";

// bool flag = bool.Parse(text); // FormatException

外部から受け取る文字列では、想定外の値が入ることがあります。そのため、基本的にはTryParse()を使って分岐するほうが安全です。

C#
string text = "yes";

if (bool.TryParse(text, out bool result))
{
Console.WriteLine(result);
}
else
{
Console.WriteLine("trueまたはfalseを指定してください");
}

"yes"/"no""1"/"0"も受け付けたい場合は、次のように独自処理を追加します。

C#
public static bool TryParseFlexibleBool(string? value, out bool result)
{
result = false;

if (string.IsNullOrWhiteSpace(value))
{
return false;
}

switch (value.Trim().ToLowerInvariant())
{
case "true":
case "1":
case "yes":
case "はい":
result = true;
return true;

case "false":
case "0":
case "no":
case "いいえ":
result = false;
return true;

default:
return false;
}
}

使い方は次のとおりです。

C#
if (TryParseFlexibleBool("yes", out bool result))
{
Console.WriteLine(result);
}

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

True

7. bool.ToString()のよくある用途別サンプル

7-1. Console.WriteLineでboolを表示する

Console.WriteLineboolを表示するだけなら、明示的にToString()を書かなくても表示できます。

C#
bool isDebug = true;

Console.WriteLine(isDebug);

実行結果は次のとおりです。

True

明示的に変換する場合は、次のように書けます。

C#
Console.WriteLine(isDebug.ToString());

どちらも表示結果は同じです。ただし、文字列変数として保持したい場合はToString()を使います。

7-2. ログ出力でbool値を文字列化する

ログ出力では、bool値をそのまま埋め込めます。

C#
bool isSuccess = false;

Console.WriteLine($"処理結果: {isSuccess}");

実行結果は次のとおりです。

処理結果: False

ログを人間が読むだけなら"True"/"False"でも問題ないことが多いです。一方で、ログを機械的に解析する場合や、他システムとフォーマットを合わせる場合は、小文字化しておくと扱いやすいことがあります。

C#
bool isSuccess = false;

Console.WriteLine($"success={isSuccess.ToString().ToLowerInvariant()}");

実行結果は次のとおりです。

success=false

7-3. CSV出力でboolを文字列にする

CSVにbool値を書き出す場合は、出力仕様に合わせて"True"/"False""true"/"false""1"/"0"などを選びます。

C#
bool isActive = true;

string csvValue = isActive.ToString();

Console.WriteLine(csvValue);

実行結果は次のとおりです。

True

小文字にしたい場合は、次のようにします。

C#
bool isActive = true;

string csvValue = isActive.ToString().ToLowerInvariant();

Console.WriteLine(csvValue);

実行結果は次のとおりです。

true

1/0で出力したい場合は、三項演算子を使います。

C#
bool isActive = true;

string csvValue = isActive ? "1" : "0";

Console.WriteLine(csvValue);

実行結果は次のとおりです。

1

7-4. XML出力で小文字のtrue/falseにする

XMLにboolean値を書き出す場合は、小文字のtrue/falseが必要になるケースがあります。bool.ToString()の結果は"True"/"False"なので、ToLowerInvariant()で変換してから出力します。

C#
bool isEnabled = true;

string value = isEnabled.ToString().ToLowerInvariant();

string xml = $"<isEnabled>{value}</isEnabled>";

Console.WriteLine(xml);

実行結果は次のとおりです。

<isEnabled>true</isEnabled>

XMLのように大文字・小文字が意味を持つ形式では、bool.ToString()の結果をそのまま使ってよいか確認することが重要です。

7-5. JSONではToString()ではなくシリアライズを使う

JSONでは、boolean値は文字列ではなくbooleanとして出力するのが基本です。次のようにToString()でJSONを組み立てると、形式ミスやエスケープ漏れの原因になります。

C#
bool isActive = true;

// 非推奨: 手作業でJSONを組み立てる
string json = "{ \"isActive\": " + isActive.ToString().ToLowerInvariant() + " }";

Console.WriteLine(json);

実行結果は次のとおりです。

{ "isActive": true }

単純な例では動きますが、実際の開発ではSystem.Text.Jsonなどのシリアライザーを使うほうが安全です。

C#
using System.Text.Json;

var user = new
{
Name = "Taro",
IsActive = true
};

string json = JsonSerializer.Serialize(user);

Console.WriteLine(json);

実行結果の例は次のとおりです。

{"Name":"Taro","IsActive":true}

JSONではboolを文字列の"true"ではなく、boolean値のtrueとして扱うことが大切です。

8. bool.ToString()に関するよくある質問

8-1. bool.ToString()とConvert.ToString()の違いは?

bool.ToString()は、bool値自身のToString()を呼び出す方法です。

C#
bool flag = true;

string text = flag.ToString();

Convert.ToString()でもboolを文字列に変換できます。

C#
bool flag = true;

string text = Convert.ToString(flag);

どちらも通常は"True"または"False"を返します。単純にbool値を文字列化するだけなら、flag.ToString()で十分です。

ただし、Convert.ToString()はさまざまな型を変換するための汎用的なメソッドです。値の型が明確にboolであれば、ToString()のほうがシンプルです。

8-2. bool.ToString()で小文字を直接返せる?

bool.ToString()だけで小文字の"true"/"false"を直接返すことはできません。Boolean.ToString()の戻り値は"True"または"False"です。Microsoft Learn

小文字にしたい場合は、次のように書きます。

C#
bool flag = true;

string text = flag.ToString().ToLowerInvariant();

または、三項演算子で明示的に指定します。

C#
bool flag = true;

string text = flag ? "true" : "false";

8-3. bool.ToString()の結果は環境や言語設定で変わる?

bool.ToString()の結果は、環境や言語設定によって"真""偽""はい""いいえ"のように変わることはありません。Boolean.ToString(IFormatProvider)にカルチャを指定しても、カルチャ固有の設定は反映されません。Microsoft Learn

C#
using System.Globalization;

bool flag = false;

Console.WriteLine(flag.ToString());
Console.WriteLine(flag.ToString(CultureInfo.GetCultureInfo("ja-JP")));
Console.WriteLine(flag.ToString(CultureInfo.GetCultureInfo("en-US")));

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

False
False
False

表示言語に合わせて変えたい場合は、自分で変換処理を実装しましょう。

8-4. bool?がnullのときToString()はどうなる?

bool?nullのときにToString()を呼び出すと、空文字列が返されます。"null"という文字列にはなりません。Nullable<T>.ToString()は、値がある場合はその値の文字列表現を返し、値がない場合は空文字列を返します。Microsoft Learn

C#
bool? flag = null;

string text = flag.ToString();

Console.WriteLine($"[{text}]");

実行結果は次のとおりです。

[]

null"未設定"などで表示したい場合は、次のように明示的に分岐します。

C#
bool? flag = null;

string text = flag.HasValue
? flag.Value.ToString()
: "未設定";

Console.WriteLine(text);

8-5. 「True」「False」以外の文字列にするには?

"True"/"False"以外の文字列にしたい場合は、三項演算子、if文、拡張メソッドなどを使います。

C#
bool flag = true;

string text = flag ? "有効" : "無効";

Console.WriteLine(text);

実行結果は次のとおりです。

有効

複数箇所で同じ変換を使う場合は、拡張メソッドにすると便利です。

C#
public static class BoolExtensions
{
public static string ToEnabledDisabled(this bool value)
{
return value ? "有効" : "無効";
}
}

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

C#
bool flag = false;

Console.WriteLine(flag.ToEnabledDisabled());

実行結果は次のとおりです。

無効

まとめ

C#でboolを文字列に変換するには、bool.ToString()を使います。true.ToString()"True"false.ToString()"False"を返します。小文字の"true"/"false"ではない点に注意しましょう。

小文字で出力したい場合は、ToString().ToLowerInvariant()を使うか、三項演算子でflag ? "true" : "false"のように明示的に指定します。XMLなど大文字・小文字が重要な形式では、bool.ToString()の結果をそのまま使わず、必要な形式に変換してから出力することが大切です。

また、画面表示で"はい"/"いいえ""有効"/"無効"のように表示したい場合は、ToString()に頼るのではなく、三項演算子や拡張メソッドで表示用の文言を定義しましょう。

文字列からboolに戻す場合は、bool.Parse()またはbool.TryParse()を使います。外部入力を扱う場合は、例外を避けられるTryParse()が安全です。bool?nullのときのToString()は空文字列になるため、未設定状態を扱う場合は明示的な分岐を入れると分かりやすくなります。