【发布时间】:2009-09-22 21:53:23
【问题描述】:
我正在使用下面的代码,偶尔 boolUpdate 不是 TRUE 或 FALSE 并且我得到一个异常,我不能用 TRY CATCH 块包围它,因为它正在使用“return”,我怎样才能正确地捕捉到这个?
if (!Boolean.Parse(boolUpdate)) return true;
【问题讨论】:
我正在使用下面的代码,偶尔 boolUpdate 不是 TRUE 或 FALSE 并且我得到一个异常,我不能用 TRY CATCH 块包围它,因为它正在使用“return”,我怎样才能正确地捕捉到这个?
if (!Boolean.Parse(boolUpdate)) return true;
【问题讨论】:
改用Boolean.TryParse怎么样?
bool result = false;
Boolean.TryParse( boolUpdate, out result );
return !result;
【讨论】:
首先,一般情况:仅仅因为你从一个块中返回并不意味着你不能把它放在一个 try/catch 中:
try
{
if ( whatever )
return true;
}
catch ( Exception E )
{
HandleMyException( E );
return false;
}
...这是完全合法的。同时,正如其他海报所写,TryParse() 可能是您在这种特定情况下想要的。
【讨论】:
只有当字符串为'true'时才会返回true,不会产生异常。
bool value;
return bool.TryParse(boolUpdate, out value) && value;
【讨论】:
当 boolUpdate 不包含 TRUE 或 FALSE 时,你应该捕获异常,但是当这种情况出现时你想做什么?您不想忽略异常,不是吗,因为我觉得您无论如何都想从方法中返回?
您可以使用Boolean.TryParse,而不是使用Boolean.Parse,如果 Parse 操作失败(例如,您的案例中的 boolUpdate 参数不包含 true 或 false),它将返回 false。
或者,您可以这样做:
try
{
return Boolean.Parse (boolUpdate)
}
catch(FormatException ex )
{
return false;
}
但是,我更喜欢使用 TryParse:
bool result;
bool containsBool = Boolean.TryParse (boolUpdate, out result);
return containsBool && result;
【讨论】:
你可以尝试使用Boolean.TryParse...它不会抛出,如果解析成功则将解析后的值放入out参数中,否则将具有默认值,如果解析成功也将返回true成功。
string blah = "true";
bool val;
Boolean.TryParse( blah, out val);
return val;
【讨论】: