我想让一个函数将语句作为参数,可以是字符串,也可以是我不知道的其他类型,如果该语句的执行抛出异常,则返回 true,否则返回 false。
这可能依赖于某种“字符串”执行,我不知道如何在 C# 中执行。
我想让一个函数将语句作为参数,可以是字符串,也可以是我不知道的其他类型,如果该语句的执行抛出异常,则返回 true,否则返回 false。
这可能依赖于某种“字符串”执行,我不知道如何在 C# 中执行。
这样做的唯一原因是为了更容易测试我的代码。
最好使用单元测试框架,例如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(); });
就我而言,没有办法做到这一点。
如果我理解正确,你想要这样的东西:
public static bool ActionSucceeds(Action action, out Exception exception)
{
try
{
action();
exception = null;
return true;
}
catch (Exception ex)
{
exception = ex;
return false;
}
}
您真的应该将异常冒泡到代码中,该异常应该是为了检查您的方法的布尔值并以您喜欢的方式处理它。例外......非常适合处理例外情况。它不能很好地转化为尝试从方法返回 true 或 false。那不是例外的设计目的。它为您的方法带来了不同的含义。