我在代码分析中收到CA2000警告。但是我找不到解决方法或为什么会出现问题。这是失败的代码:

 IController controller = new ErrorController();
      controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));


我试图像这样解决它:

using (IController controller = new ErrorController())
      {
        controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
      }


但是MVC给我这个错误:

55  'System.Web.Mvc.IController': type used in a using statement must be implicitly convertible to 'System.IDisposable'


我可以抑制错误,但是我想知道是什么导致了错误并解决了问题。

最佳答案

与其使用接口,不如将其替换为var

using (var controller = new ErrorController())
      {
        controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
      }


这将允许将类型推断为ErrorController

IDisposable接口附加到Controller类。但不存在更高的链条。 Here is the docs for Controller。因此,为了进行处理,您需要在实现IDisposable的类上调用它。因此,IController won't work

关于c# - Controller 上的“CA2000在失去作用域之前先放置对象”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15357290/

10-10 10:35