我想让一个函数将一个语句作为参数,作为字符串或我不知道的其他类型,如果该语句的执行引发异常,则返回true,并返回false否则。
这可能依赖于某种“字符串”执行,我不知道如何在C#中执行。
答案 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)
现在我们为您的问题提供了更好的背景......
我建议您编写可以捕获和响应异常的测试,您可以考虑使用现有的测试框架,例如NUnit或MSTest。
这些库提供了在执行期间运行测试和捕获异常(预期和非预期)所需的基础结构。这允许运行整个测试套件,即使单个测试失败也是如此。您还可以使用提供的Assert
实用程序来帮助测试失败条件,而不是直接抛出异常。
答案 4 :(得分:0)
你应该把异常冒充到代码中,该代码应该用于检查你所讨论的方法的布尔值,并按照你喜欢的方式处理它。例外情况......适用于处理特殊情况。它不能很好地转换为尝试从方法返回true或false。这不是设计要做的例外。它为你的方法带来了不同的含义。