如何创建一个函数来告诉我语句是否在c#中抛出异常

时间:2011-02-02 20:56:54

标签: c# exception execution function-parameter

我想让一个函数将一个语句作为参数,作为字符串或我不知道的其他类型,如果该语句的执行引发异常,则返回true,并返回false否则。

这可能依赖于某种“字符串”执行,我不知道如何在C#中执行。

5 个答案:

答案 0 :(得分:4)

  

真正唯一的原因是为了更容易测试我的代码。

最好使用单元测试框架,例如NUnit或Visual Studio Team Test:

要说一个方法应该抛出异常,你可以添加ExpectedException属性,例如:

[Test]
[ExpectedException(typeof(ArgumentException)]
public void NullUserIdInConstructor()
{
    LogonInfo logonInfo = new LogonInfo(null, "P@ss0word");
}

如果您不添加此属性并且方法抛出,则测试会自动失败。


为了完整性,我还会回答你提出的问题:你不能执行字符串,但可以将Action作为参数传递。

bool ThrowsException(Action action)
{
    try
    {
        action();
        return false;
    }
    catch
    {
        return true;
    }
}

您可以像这样使用它,例如:

bool result = ThrowsException(() => { throw new NotImplementedException(); });

答案 1 :(得分:1)

就我而言,没有办法做到这一点。

答案 2 :(得分:1)

如果我理解正确,你需要这样的东西:

public static bool ActionSucceeds(Action action, out Exception exception)
{
    try 
    {
        action(); 
        exception = null;
        return true;
    }
    catch (Exception ex)
    {
        exception = ex;
        return false;
    }
}

答案 3 :(得分:0)

现在我们为您的问题提供了更好的背景......

我建议您编写可以捕获和响应异常的测试,您可以考虑使用现有的测试框架,例如NUnitMSTest

这些库提供了在执行期间运行测试和捕获异常(预期和非预期)所需的基础结构。这允许运行整个测试套件,即使单个测试失败也是如此。您还可以使用提供的Assert实用程序来帮助测试失败条件,而不是直接抛出异常。

答案 4 :(得分:0)

你应该把异常冒充到代码中,该代码应该用于检查你所讨论的方法的布尔值,并按照你喜欢的方式处理它。例外情况......适用于处理特殊情况。它不能很好地转换为尝试从方法返回true或false。这不是设计要做的例外。它为你的方法带来了不同的含义。