我在代码分析中收到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/