C# Programming

C#における堅牢な文字列からブール値への変換

Spread the love

目次

bool.TryParse()を使った堅牢なブール値変換

文字列をブール値に変換することは、特にユーザー入力や外部データソースを処理する際に、C#で頻繁に行われるタスクです。文字列はしばしば暗黙的にブール状態(”true”、”false”、”1″、”0″)を表します。最も堅牢なアプローチは、bool.TryParse()メソッドを活用することです。

bool.TryParse()は、例外をスローすることなく変換を試みます。成功するとtrueを返し、結果のブール値をoutパラメーターに格納します。それ以外の場合はfalseを返します。これにより、適切なエラー処理が可能になります。


string strTrue = "True";
string strFalse = "false";
string invalidString = "hello";
bool result;

if (bool.TryParse(strTrue, out result))
{
    Console.WriteLine($"変換成功: {result}"); // 出力: 変換成功: True
}
else
{
    Console.WriteLine("変換失敗");
}

if (bool.TryParse(strFalse, out result))
{
    Console.WriteLine($"変換成功: {result}"); // 出力: 変換成功: False
}
else
{
    Console.WriteLine("変換失敗");
}

if (bool.TryParse(invalidString, out result))
{
    Console.WriteLine($"変換成功: {result}");
}
else
{
    Console.WriteLine("変換失敗"); // 出力: 変換失敗
}

このメソッドは、予期しない入力によるクラッシュを防ぐため、そのエラー耐性のために推奨されます。変換失敗を適切に処理し、おそらく情報的なエラーメッセージを表示したり、デフォルトのブール値を使用したりすることができます。

直接変換メソッド: bool.Parse()Convert.ToBoolean()

bool.TryParse()が堅牢性のために推奨されますが、bool.Parse()Convert.ToBoolean()はより簡潔で、許容範囲の狭い代替手段を提供します。

bool.Parse()は文字列を直接変換します。”True”、”False”、”true”、”false”、”1″、”0″を受け入れます(”True”と”False”は大文字と小文字を区別しません)。無効な入力に対してはFormatExceptionをスローします。


string strTrue = "True";
bool boolTrue = bool.Parse(strTrue); // true

Convert.ToBoolean()は同様に動作しますが、null入力をfalseを返すことで処理し、ArgumentNullExceptionを回避します。


string strNull = null;
bool boolNull = Convert.ToBoolean(strNull); // false

しかし、どちらのメソッドも、予期しない入力文字列を処理する上で、bool.TryParse()よりも柔軟性が低く、エラーが発生しやすいです。

様々な文字列表現の処理

アプリケーションがブール値の様々な文字列表現をどのように処理するかは重要です。既に説明したメソッドは”true”、”false”、”1″、”0″を受け入れますが、”yes”、”no”、”Y”、”N”、またはカスタム表現など、様々なバリエーションが発生する可能性があります。このような場合は、switch文や辞書ルックアップを使用して、変換前に入力文字列を正規化するカスタム前処理を追加することを検討してください。

例えば、”yes”と”no”に対応するには:


string input = "yes";
string normalizedInput = input.ToLower();
bool result;

if (normalizedInput == "yes" || normalizedInput == "true" || normalizedInput == "1")
{
    result = true;
}
else if (normalizedInput == "no" || normalizedInput == "false" || normalizedInput == "0")
{
    result = false;
}
else
{
    // 無効な入力を処理する
    result = false; // または例外をスローする
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です