1

我在代码分析中有 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'

我可以抑制错误,但我想知道导致错误的原因并解决问题。

4

2 回答 2

5

我不使用该界面,而是将其换成var

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

这将允许将类型推断为ErrorController.

IDisposable接口附加到类Controller。但不存在更高的链条。 这是Controller. 所以,为了处理,你需要在实现的类上调用它IDisposable。因此,IController 不会工作

于 2013-03-12T09:23:26.147 回答
4

您的using声明将 the 向上转换ErrorController为 a IController,这可能没有实现IDisposable(而除了 之外ErrorController 实现了)。更改为:IDisposableIController

using (var controller = new ErrorController())

或者:

using (ErrorController controller = new ErrorController())
于 2013-03-12T09:24:45.293 回答