これはConvert.ToBoolean
、 が次のいずれかを予期しているために発生しています。
のその他の値は無効ですBoolean
。
あなたはすでにきれいなアプローチを持っています:
var myValue = Convert.ToBoolean(Convert.ToInt32("0"));
編集:変換を処理する醜さを隠しながら、これらのケースのいくつかを処理する拡張メソッドを作成できます。
この拡張機能は、次の非常に大まかな解釈を提供しますBoolean
。
"True"
(文字列) =true
"False"
(文字列) =false
"0"
(文字列) =false
- その他の文字列 =
true
コード:
public static class Extensions
{
public static Boolean ToBoolean(this string str)
{
String cleanValue = (str ?? "").Trim();
if (String.Equals(cleanValue, "False", StringComparison.OrdinalIgnoreCase))
return false;
return
(String.Equals(cleanValue, "True", StringComparison.OrdinalIgnoreCase)) ||
(cleanValue != "0");
}
}
または、より厳密なアプローチが必要な場合は、.NET Framework が期待するものに従います。次に、try/catch
ステートメントを使用します。
public static class Extensions
{
public static Boolean ToBoolean(this string str)
{
try
{
return Convert.ToBoolean(str);
}
catch { }
try
{
return Convert.ToBoolean(Convert.ToInt32(str));
}
catch { }
return false;
}
}
Albeit, not a clean or pretty approach, but it guarantees more possibilities of getting the correct value. And, the Extensions
class is tucked away from your data/business code.
In the end, your conversion code is relatively simple to use:
String myString = "1";
Boolean myBoolean = myString.ToBoolean();