gpt4 book ai didi

asp.net-mvc-3 - 任何人都可以解释 CA1822 在 Controller 操作上的目的和解决方案吗?

转载 作者:行者123 更新时间:2023-12-03 18:29:29 24 4
gpt4 key购买 nike

Error CA1822 : Microsoft.Performance : The 'this' parameter (or 'Me' in Visual Basic) of 'SomeController.AnAction(string, string)' is never used. Mark the member as static (or Shared in Visual Basic) or use 'this'/'Me' in the method body or at least one property accessor, if appropriate.



当通过 URL 请求时,静态操作会产生 404 not found。该操作在代码分析关闭的情况下按预期工作。这有什么意义,适当的补救措施是什么?

注意 Action 的返回类型是 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 所以它应该可以工作。

最佳答案

我怀疑在不使用任何实例成员调用的情况下更改返回类型是否真的能解决问题。我怀疑为了更改返回类型,您将 return 语句更改为访问实例成员的内容。

现在我不知道 MVC 中的路由处理是否会让您将方法标记为静态,但值得研究。尽管警告是在性能方面给出的,但我会从意图和可读性方面考虑它。

通常,方法或属性成为实例成员(而不是静态成员)有两个原因:

  • 它需要访问另一个实例成员,因为它的行为方式取决于对象的状态
  • 它需要根据它被调用的实例的实际类型来表现多态,以便可以覆盖该行为

  • 如果这两种情况都不是,则该方法可以设为静态,这表明不需要多态性并且不需要实例状态。静态成员有效地宣传它所依赖的唯一状态是类型本身(和参数)的状态,并且它不会表现多态。除此之外,这意味着您也可以在不创建实例的情况下对其进行测试。

    当然,如果 MVC 的基础结构要求它是一个实例方法,那么您应该取消警告,并用注释来表明这一事实。

    关于asp.net-mvc-3 - 任何人都可以解释 CA1822 在 Controller 操作上的目的和解决方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10704654/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com