使用yield return 和 直接使用return的区别
来源:7-7 【应用】属性级别数据验证

南船座
2022-03-11
如题
对于2分40秒的时候——使用yield return 下次调用的时候还会继续执行 这句话不太理解
按照我的理解,每次一个http请求,会通过http协议,传入到控制器中,[FromRoute]或者[FromBody]会解析这些参数,接着传入到Dto中,Dto的data annocation注解会自动对这些参数的值进行验证,使用自定义验证方法,如果参数校验不正确,就直接return一个4xx或者5xx级别的响应返回给前端,所以按照我的理解:1次前端请求->后端拿到数据->解析验证->验证失败->直接return返回给前端报错,所以就直接return了,这一次http请求就结束了
老师说的yield return 下次调用的时候还会继续执行 这句话不太理解,那下次调用的时候,不就又是一个新的http请求吗?又会执行1次前端请求->后端拿到数据->解析验证-> 不算成不成功,最后都会返回给结果给前端,所以“下次调用的时候还会继续执行”这句话不太理解,希望老师给我一个回复,多谢
1回答
-
yield是C#为了简化遍历操作的特殊的语法,它的作用是将当前集合中的元素立即返回,只要没有yield break或 yield return,方法还是会继续执行循环到迭代结束。实际上,使用yield return返回以后的方法的返回类型是一个集合,并且是一个带有迭代功能的集合,也就是一个支持IEnumerator接口的集合。
而所谓的“yield return 下次调用的时候还会继续执行”中的“下次调用”指的并不是下次的http请求,而是数据验证的迭代的调用过程,因为我们dto中的字段有好多个,每个都要验证,所以是一个迭代验证的过程。
这里有一篇非常好的文章值得看一下,https://blog.csdn.net/fdyshlk/article/details/80215192
012022-03-18
相似问题