C# 使用Try-Catch查找布尔值

C# 使用Try-Catch查找布尔值,c#,boolean,try-catch,C#,Boolean,Try Catch,我有几个布尔值检查。我想签入任何返回false的值,然后执行一些操作 我尝试了以下方法: bool formIsValid = true; try{ Utility.testStringHasValue(txEmail.Text); <--- true Utility.testStringHasValue(txFirstName.Text); <--- true Utility.testStringHasValue(txLastName.Text);

我有几个布尔值检查。我想签入任何返回false的值,然后执行一些操作

我尝试了以下方法:

bool formIsValid = true;

try{

    Utility.testStringHasValue(txEmail.Text);   <--- true
    Utility.testStringHasValue(txFirstName.Text);  <--- true
    Utility.testStringHasValue(txLastName.Text);  <--- FALSE
    Utility.testStringHasValue(txUserEmployer.Text); <--- true
    Utility.testStringHasValue(txUserPassword.Text); <--- true
    Utility.testStringHasValue(txUserPassword2.Text); <--- true
}
catch (Exception)
{
    formIsValid = false
}
异常处理不应用作控制逻辑。它混淆了目的


异常处理不应用作控制逻辑。它混淆了目的。

这是因为返回
false
不会引发异常。你可以一直这样做:

if (!(
    Utility.testStringHasValue(txEmail.Text) &&
    Utility.testStringHasValue(txFirstName.Text) &&
    Utility.testStringHasValue(txLastName.Text) &&
    Utility.testStringHasValue(txUserEmployer.Text) &&
    Utility.testStringHasValue(txUserPassword.Text) &&
    Utility.testStringHasValue(txUserPassword2.Text)))
{
    throw new Exception("Something is false");
}

这是因为返回
false
不会引发异常。你可以一直这样做:

if (!(
    Utility.testStringHasValue(txEmail.Text) &&
    Utility.testStringHasValue(txFirstName.Text) &&
    Utility.testStringHasValue(txLastName.Text) &&
    Utility.testStringHasValue(txUserEmployer.Text) &&
    Utility.testStringHasValue(txUserPassword.Text) &&
    Utility.testStringHasValue(txUserPassword2.Text)))
{
    throw new Exception("Something is false");
}

不要在这种情况下使用异常,当抛出异常时会影响性能

还有一种方法可以检查是否输入了字符串(string.IsNullOrEmpty)

您可以使用&&(and)运算符验证所有字段是否有效

例如:

或者,您可以使用| |(或)操作符以另一种方式翻转它


不要在这种情况下使用异常,当抛出异常时会影响性能

还有一种方法可以检查是否输入了字符串(string.IsNullOrEmpty)

您可以使用&&(and)运算符验证所有字段是否有效

例如:

或者,您可以使用| |(或)操作符以另一种方式翻转它


如果您编写了实用程序方法,那么我建议确保它不会引发异常,特别是如果它返回一个指示字符串是否有值的布尔值

您可以只执行以下操作,并完全避免使用
try{}catch{}

bool formIsValid = Utility.testStringHasValue(txEmail.Text);   <--- true
                   && Utility.testStringHasValue(txFirstName.Text);  <--- true
                   && Utility.testStringHasValue(txLastName.Text);  <--- FALSE
                   && Utility.testStringHasValue(txUserEmployer.Text); <--- true
                   && Utility.testStringHasValue(txUserPassword.Text); <--- true
                   && Utility.testStringHasValue(txUserPassword2.Text); <--- true

bool formIsValid=Utility.testStringHasValue(txEmail.Text) 如果您编写了实用程序方法,那么我建议确保它不会引发异常,特别是如果它返回一个指示字符串是否有值的布尔值

您可以只执行以下操作,并完全避免使用
try{}catch{}

bool formIsValid = Utility.testStringHasValue(txEmail.Text);   <--- true
                   && Utility.testStringHasValue(txFirstName.Text);  <--- true
                   && Utility.testStringHasValue(txLastName.Text);  <--- FALSE
                   && Utility.testStringHasValue(txUserEmployer.Text); <--- true
                   && Utility.testStringHasValue(txUserPassword.Text); <--- true
                   && Utility.testStringHasValue(txUserPassword2.Text); <--- true

bool formIsValid=Utility.testStringHasValue(txEmail.Text) 重新编码
实用程序.testStringHasValue()
以返回false,而不是引发异常。 下一个


重新编码
实用程序.testStringHasValue()
以返回false,而不是引发异常。 下一个


testStringHasValue返回什么?如果是布尔值,则只需使用所有组合返回值,如下所示:

boolean result = true;
result = result && Utility.testStringHasValue(txEmail.Text); 
result = result && Utility.testStringHasValue(txFirstName.Text);
return result;

您使用异常的方式不是很好。它们不应用于此类验证,只有在实际抛出异常而非onyl时,您达到捕获的意图才有效,因为它返回的是布尔假值。

testStringHasValue返回什么?如果是布尔值,则只需使用所有组合返回值,如下所示:

boolean result = true;
result = result && Utility.testStringHasValue(txEmail.Text); 
result = result && Utility.testStringHasValue(txFirstName.Text);
return result;

您使用异常的方式不是很好。它们不应用于此类验证,只有在您实际抛出异常而非onyl时,您达到捕获的意图才有效,因为它返回的是布尔假值。

try..catch异常处理比简单的布尔检查更昂贵,从资源角度看。来自msdn站点re:try..catch:“在运行时捕获异常会产生额外的开销,并且可能比预先检查以避免异常要慢。”
使用if..then,如前所示。

try..catch异常处理比简单的布尔检查、资源方面的检查更昂贵。来自msdn站点re:try..catch:“在运行时捕获异常会产生额外的开销,并且可能比预先检查以避免异常要慢。”
使用if..then,如前所示。

您是否考虑过编写一个可重用的方法来检查传递给它的所有值是否为空?如果您在多个地方使用代码,这样做可以节省大量时间:

using System.Linq;

public static class Utility
{
    public static bool EnsureValuesNotEmpty(params string[] values)
    {
        return values.All(value => !string.IsNullOrWhiteSpace(value));
    }
}
然后,您可以用更少的代码重新使用该功能,只需将所有要检查的值传递给它:

var formIsValid = Utility.EnsureValuesNotEmpty(txEmail.Text,
                                               txFirstName.Text,
                                               txLastName.Text,
                                               txUserEmployer.Text,
                                               txUserPassword.Text,
                                               txUserPassword2.Text);

您是否考虑过编写一个可重用的方法来检查传递给它的所有值都不是空的?如果您在多个地方使用代码,这样做可以节省大量时间:

using System.Linq;

public static class Utility
{
    public static bool EnsureValuesNotEmpty(params string[] values)
    {
        return values.All(value => !string.IsNullOrWhiteSpace(value));
    }
}
然后,您可以用更少的代码重新使用该功能,只需将所有要检查的值传递给它:

var formIsValid = Utility.EnsureValuesNotEmpty(txEmail.Text,
                                               txFirstName.Text,
                                               txLastName.Text,
                                               txUserEmployer.Text,
                                               txUserPassword.Text,
                                               txUserPassword2.Text);

不是异常处理的好例子。什么是
实用程序。testStringHasValue
?这里的try/catch基本上充当未标记的转到:(不是异常处理的好例子。什么是
实用程序。testStringHasValue
?这里的try/catch基本上充当未标记的转到:(
var formIsValid = Utility.EnsureValuesNotEmpty(txEmail.Text,
                                               txFirstName.Text,
                                               txLastName.Text,
                                               txUserEmployer.Text,
                                               txUserPassword.Text,
                                               txUserPassword2.Text);