【问题标题】:ReSharper conventions for names of event handlers事件处理程序名称的 ReSharper 约定
【发布时间】:2011-11-08 20:12:56
【问题描述】:

当我为任何事件添加新的事件处理程序时,VS 会创建类似object_Click 的方法。 但是 ReSharper 将此方法强调为警告,因为所有方法都不应有任何分隔符,例如“_”。

如何自定义 ReSharper 的规则,使其不强调这些方法?还是我应该重命名这些方法?

提前致谢。

【问题讨论】:

  • 我想我在工作中得到了它,但现在我不记得了,如果我记得会跟进规则。
  • 我错了,我只是接受了似乎发生的事件的警告。 =/对不起

标签: c# resharper


【解决方案1】:

对于 C#(或 VB),进行以下更改:

ReSharper |选项 |语言 | C# | C# 命名样式,高级设置... 将“字段上的事件订阅”从 $object$_On$event$ 更改为 $object$_$event$

您可能还想向“类型和命名空间”等实体类型添加额外的规则,以说明“Default”等代码生成的类。例如,添加一个带有“”名称前缀和名称样式“UpperCamelCase”的新规则。

【讨论】:

  • 在我的情况下,它正在将 $object$_On$event$ 更改为 $object$_$event$(删除“On”)。否则,Page_Load 之类的方法名称仍会加下划线。
  • 有没有办法修改它,使 $object$ 以大写字母开头?
【解决方案2】:

就个人而言,我建议重命名这些方法。一般来说,我认为 VS 为控件和事件提供了糟糕的名称。

我更喜欢让方法名称说明它所做的,而不是它的调用方式。这也促进了重用。诚然,事件处理程序的签名通常不适合重用 - 我认为,调用具有更合理参数的方法的 lambda 表达式通常会很有用:

button.Click += (sender, args) => SaveCurrentDocument();

但显然设计师不支持:(

当然,重命名所有方法将比仅仅更改 R# 设置更有效,如果你能找到一些可行的话......

【讨论】:

  • 但是有问题的方法是按它说的做。它正在处理单击按钮的事实。如果所需的操作是保存文档,则按钮单击处理程序应调用其他方法来执行此操作。出于这个原因,我不喜欢事件处理程序中的很多代码。它还会妨碍将多个操作连接到相同的结果(按钮单击、菜单项、上下文菜单项等)。如果这些处理程序中的每一个都调用相同的公共方法,那么就没有混淆。
  • 在大多数情况下,我认为它会。对于诸如单击网格中的一行之类的事件,我认为事件处理程序应该负责解释特定于控件的信息,例如确定单击了哪一行,并可能在将绑定对象传递给井之前提取它对那个对象做某事的命名方法。如果这可以在 lambda 中完成,那就太好了。不过,有时为了清楚起见,将它分解在“适当的”事件处理程序中会很好。一如既往……这取决于。
  • @Jon:如果 Visual Studio 能够在某个时候整理出其自动生成的事件处理程序,那就太好了。导致很多人走错了路,加上 2010 仍然使用完整的事件处理程序分配而没有委托推断,并且没有办法改变它。
  • 顺便说一句:Pro WPF in C# 2010 建议将事件处理程序方法和它们背后的实际逻辑分开。 “这种模式使您可以灵活地更改 [逻辑] 代码的位置,将 [控件] 替换为不同的控件,并将多个控件连接到同一进程,所有这些都不会限制您更改用户界面的能力稍后。”
  • 同意 ofc,但不管 API 是什么,这种方法听起来都很合理。
【解决方案3】:

我刚刚为 Visual Studio 2010 创建了一个扩展 EventHandler Naming,它允许您使用简单的模式指定您希望生成的事件处理程序名称是什么。扩展中的默认模式是 On$(SiteName)$(EventName),它将为您提供像 OnBtnNameClick 这样的事件名称,而不是 btnName_Click。您可以通过http://tech.einaregilsson.com/2010/12/22/better-eventhandler-names-in-visual-studio-2010/获取扩展名

【讨论】:

    【解决方案4】:

    在您的文件菜单上,您应该有“Resharper”点击它 -> 选项 -> 命名约定(在左侧菜单上)。

    您可以从那里指定每种命名类型/样式使用的命名约定。

    【讨论】:

    • 谢谢,但 ReSharper 允许添加一些规则,例如 UpperCamelCase、lowerCamelCase、ALL_UPPER、all_lower、First_upper。但我需要这样的东西——UpperCamelCase_UpperCamelCase。 ReSharper 5 具有“高级设置”,但我无法编写正确的规则。
    • @PavelBelousov Resharper 7 可以处理您在此处提到的限制。我的设置允许以下私有方法:lowerCamelCase_UnderscoreTolerant、_lowerCamelCase_UnderscoreTolerant、UpperCamelCase。我很确定 R# 6 也可以,因为这是我在上一份工作中使用的。
    猜你喜欢
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    相关资源
    最近更新 更多