微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果在循环中调用某个方法,C# 编译器是否会抛出错误或警告

如何解决如果在循环中调用某个方法,C# 编译器是否会抛出错误或警告

我团队中的开发人员经常会在循环中编写代码,从而进行相对较慢的调用(即数据库访问或 Web 服务调用或其他慢速方法)。这是一个超级常见的错误

是的,我们会练习代码审查,我们会尝试在合并之前捕获并修复它们。不过,越早失败越好,对吧?

那么有没有办法通过编译器来捕捉这个错误

示例:

想象一下这个方法

public ReturnObject SlowMethod(Something thing) 
{
    // method work
}

下面的方法是循环调用的,是错误的。

public ReturnObject Call(IEnumerable<Something> things)
{
    foreach(var thing in Things)
        SlowMethod(thing); // Should throw compiler error or warning in a loop
}

有没有什么办法可以用属性或编译器语句来装饰上面的SlowMethod(),让它在循环中使用时会报错?

解决方法

不,常规 C# 中没有任何内容可以防止方法在循环中使用。

您的选择:

,

显然,在循环中调用那些缓慢的方法是有意义的 - 您正在努力防止这种情况发生,但这是将工作投入到根本上是负面的。为什么不做一些积极的事情呢?显然,您提供了一个便于在循环中使用的 API。因此,提供一些更容易正确使用的替代方法,以前在循环中会发生错误使用,例如:

  1. 一个基于可迭代的 API,它将使循环隐式,以消除一些延迟,因为您可以全面了解将要迭代的内容,并且可以适当地隐藏延迟,
  2. 一个不会阻塞线程的异步 API,示例代码展示了如何在您目前遇到的典型情况下使用它;请记住,很难正确使用的 API 将不会被使用!
  3. 最低公分母 API:将方法拆分为请求者和结果提供者,因此自然会有两个循环:一个用于提交所有请求,另一个用于收集和处理结果(我不喜欢这样方法,因为它不会使代码更好)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。