我在代码分析中遇到了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'
我可以压制错误,但我想知道导致错误的原因并解决问题。
答案 0 :(得分:5)
我会将其换成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。
答案 1 :(得分:4)
您的using
声明正在将ErrorController
提升为IController
,这可能不会实现IDisposable
(而ErrorController
会<除IDisposable
之外,/ em>实施IController
。改为:
using (var controller = new ErrorController())
或者:
using (ErrorController controller = new ErrorController())