【问题标题】:Is this really a simplification?这真的是简化吗?
【发布时间】:2015-10-17 13:05:29
【问题描述】:

所以我有一个带有Id 字段的非常简单的类,Id 可以在构造函数中设置。

通常我将使用this 来清楚地识别类属性而不是方法参数。对我来说,这似乎更清楚。

IDE0003 想让我删除 this,并显示“名称可以简化”消息,对吗?

这对我来说似乎不太清楚,并且还允许大小写错误很容易导致id = id

【问题讨论】:

  • 好吧,我想你已经说过了:不是每个“简化”也是“澄清”..
  • 我认为它们都编译成同一个东西。所以你只是简化你写的东西。
  • 嗯,这类问题似乎只有使用黑色编辑器窗口背景的程序员才会提出。是的,那个灯泡很明显。当背景很亮时,更容易不被它打扰:) 当然这是一个“简化”,代码更少。但它在运行时绝对没有区别,而且它肯定不会帮助您使用自动完成。
  • @Hans 我为我的编辑使用深色主题,特此行使我感到被冒犯的权利。 ;)
  • 是的,在微软。真是个疏忽,不是吗?

标签: c# visual-studio-2015


【解决方案1】:

如果您想阻止代码中的警告而不是更新 Visual Studio 设置,请使用 SuppressMessage 数据注释来阻止警告。

看起来像这样:

[SuppressMessage("Reason #Enter whatever you'd like", "ID, must match what intellsense is showing it looks something like this: IDE0001", Justification = "(optional, your own description")]

这是您的“this”变量情况的确切示例。

[SuppressMessage("IntelliSenseCorrection", "IDE0003", Justification = "Allowing this variable to consistency/readability of code.")]

【讨论】:

  • 请注意,这必须应用于函数声明,而不是“违规”语句。尝试将其应用于语句会引发“CS7014:属性在此上下文中无效”。然而,这是我一直在寻找的解决方案。谢谢!
【解决方案2】:

this other question有一个答案说您可以配置编辑器以删除该行为。我个人喜欢“这个”

Tools > Options > Text Editor > C# > Code Style and check Qualify member access with 'this'

Visual Studio 2015 - Change Light Bulb, Quick Action settings

【讨论】:

  • 使用关键字this 明确显示变量存在的位置。如果它没有以thisbase 或类名(对于静态方法)为前缀,则该变量的作用域是局部的,并且与方法一样是全局的。这使得意图和可读性比它的遗漏更清晰。
【解决方案3】:

如果您使用General Naming Conventions,那么this 关键字是多余的,因为参数应该是id,而属性应该是Id,基于Naming Guidelines。所以看起来很清楚:

public int Id 
{ 
   get; 
   private set; 
}


public VSOMessage(int id)
{
    Id = id;
}

请注意,指南本身并没有说明使用或不使用 this 关键字,但由于 C# 区分大小写,删除 this 关键字会很简单,但 如果您不使用 命名约定,那么您可以将属性命名为id 而不是Id,因此在这种情况下您应该使用this 关键字。

【讨论】:

  • 关键字this 在这种情况下非常有用:“限定被相似名称隐藏的成员”。此外,并非每个成员变量都是属性,并且某些属性可能具有支持变量(对于不可变对象尤其有用)。此外,使用thisbase 和静态方法的类名可以提高可读性并巩固意图。
【解决方案4】:

this 关键字几乎总是不必要的,请参阅When do you use the "this" keyword?

允许大小写错误很容易导致id = id

这将自行产生另一个警告:

对同一个变量进行赋值;你的意思是指派别的东西吗?

【讨论】:

  • C# 区分大小写。在这种情况下,删除 This 确实是一种简化。
  • @DieterB,如果 C# 区分大小写(因为它是),那么真正的简化将是删除 this,而不是 This:p
  • 只是出于好奇,是否有任何来自 Microsoft 的文章可以说明为什么默认启用此类规则?例如,为什么他们不让默认规则集接受任何东西,因为 VS 2013 没有强制执行或关注任何特定样式?
猜你喜欢
  • 2010-10-20
  • 1970-01-01
  • 2011-01-02
  • 2013-11-28
  • 2012-12-15
  • 1970-01-01
  • 2017-02-17
  • 2012-11-25
  • 2012-07-16
相关资源
最近更新 更多