错误CA1822:Microsoft.Performance:'this'参数(或'我' 在Visual Basic中)'SomeController.AnAction(string,string)'永远不会 用过的。将成员标记为静态(或在Visual Basic中为Shared)或使用 方法体中的'this'/'Me'或至少一个属性访问器,如果 合适的。
静态操作会在通过URL请求时找不到404。该操作正在按预期工作,代码分析已关闭。这有什么意义,适当的补救措施是什么?
注意,操作的返回类型是PartialViewResult,如果返回类型为ActionResult,则代码分析似乎不会抱怨此情况。
[HttpPost]
public PartialViewResult BlankEditorRow(string formId, Common.Entities.Common.ObjTypeEnum objType)
{
if (objType == Common.Entities.Common.ObjTypeEnum.Regular)
return new AjaxPartialViewResult("_RowEditor", new ProcedureEntryEntity()) { UpdateValidationForFormId = formId };
else
return new AjaxPartialViewResult("_TemplateRowEditor", new ProcedureEntryEntity()) { UpdateValidationForFormId = formId };
}
更新:看起来将返回类型更改为ActionResult会解决错误,而PartialViewResult是ActionResult,因此它应该可以正常工作。
答案 0 :(得分:10)
我怀疑更改返回类型而不使用任何实例成员调用确实可以解决问题。我怀疑为了更改返回类型,您将return语句更改为访问实例成员的内容。
现在我不知道MVC中的路由处理是否让将方法标记为静态,但是值得研究。尽管警告是在性能方面给出的,但我会根据意图和可读性来考虑它。
通常,将方法或属性作为实例成员(而不是静态)有两个原因:
如果这两种情况都不是这样,那么该方法可以是静态的,其中表示没有预期的多态性,也不需要实例状态。静态成员有效地宣告它所依赖的唯一状态是类型本身的状态(和参数),并且它不会以多态方式运行。除此之外,这意味着您可以测试而无需创建实例。
当然,如果MVC的基础设施需要它是一个实例方法,那么你应该只是通过注释来抑制警告,以表明这一事实。
答案 1 :(得分:4)
我认为CA并没有考虑到这是MVC app中的控制器操作。我会抑制。