Jur*_*gen 4 c# iterator exception
我正在编写一个需要检查一些参数的方法,如果它们被验证,则返回一个IEnumerable.例如
public static IEnumerable<double> GetEnum(int param)
{
if (!IsValidParameter(param))
{
throw new Exception();
}
while(true)
{
yield return 5.0;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我相信由于懒惰的评估,当我使用错误的参数运行我的单元测试,但是还没有调用任何IEnumerable方法时,不抛出异常.
[Test]
[ExpectedException(typeof(Exception))]
void Test()
{
var ie = GetEnum(bad_param);
}
Run Code Online (Sandbox Code Playgroud)
我可以通过在另一个函数(比如Foo)中构建IEnumerable来修复问题,然后检查GetEnum中的参数并调用Foo但是有没有创建多个函数的解决方案?
干杯,尤尔根
由于如何定义迭代器块,您目前需要两种方法来实现此目的:
public static IEnumerable<double> GetEnum(int param) {
if (!IsValidParameter(param)) {
throw new Exception();
}
return GetEnumCore(param);
}
private static IEnumerable<double> GetEnumCore(int param) {
while(true) {
yield return 5.0;
}
}
Run Code Online (Sandbox Code Playgroud)
只GetEnumCore延迟了迭代器块(); GetEnum立即运行,执行检查.