C# 这真的是一种简化吗?
因此,我有一个非常简单的类,它有一个C# 这真的是一种简化吗?,c#,visual-studio-2015,C#,Visual Studio 2015,因此,我有一个非常简单的类,它有一个Id字段,可以在构造函数中设置Id 通常,我将使用this来明确标识类属性,而不是方法参数。对我来说,这似乎更清楚 IDE0003想让我删除带有消息“名称可以简化”的此,对吗 这对我来说似乎不太清楚,并且允许套管错误很容易导致id=id 几乎总是不需要这个关键字,请参阅 允许套管错误容易导致id=id 这本身将产生另一个警告: 对同一变量进行赋值;你的意思是分配其他的东西吗 如果使用,则this关键字是多余的,因为参数应为id,属性应为id。看来很清楚: pu
Id
字段,可以在构造函数中设置Id
通常,我将使用this
来明确标识类属性,而不是方法参数。对我来说,这似乎更清楚
IDE0003想让我删除带有消息“名称可以简化”的此
,对吗
这对我来说似乎不太清楚,并且允许套管错误很容易导致id=id
几乎总是不需要
这个
关键字,请参阅
允许套管错误容易导致id=id
这本身将产生另一个警告:
对同一变量进行赋值;你的意思是分配其他的东西吗
如果使用,则this
关键字是多余的,因为参数应为id
,属性应为id
。看来很清楚:
public int Id
{
get;
private set;
}
public VSOMessage(int id)
{
Id = id;
}
请注意,指南本身没有说明使用或不使用
这个
关键字,但因为C#区分大小写,删除这个
关键字是一种简化,但是当您不使用命名约定时,您可以命名属性id
,而不是id
,因此在这种情况下,您应该使用这个
关键字。另一个问题的答案是,您可以将编辑器配置为删除行为。我个人喜欢“这个”
如果要防止代码中出现警告,而不是更新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")]
下面是一个关于“此”变量情况的确切示例
[SuppressMessage("IntelliSenseCorrection", "IDE0003", Justification = "Allowing this variable to consistency/readability of code.")]
好吧,我想你已经说了:不是每一个“简化”都是一个“澄清”……我想它们都编译成了同一个东西。所以你只需要简化你所写的东西,没有其他东西。嗯,这些问题似乎只有在使用黑色编辑器窗口背景的程序员才会问。是的,那个灯泡很显眼。当背景较亮时,更容易不被它困扰:)当然这是一种“简化”,代码更少。但它在运行时完全没有区别,而且它肯定不会帮助您使用自动完成。@Hans我为我的编辑器使用黑色主题,因此我有权感到被冒犯。。)是的,在微软。真是个大疏忽,不是吗?C#区分大小写。在这种情况下,删除这个确实是一种简化。@DieterB,如果C#是区分大小写的(事实上),那么真正的简化应该是删除
这个,而不是这个:p只是出于好奇,是否有微软的文章对默认情况下启用此类规则的原因进行了解释?例如,为什么他们不让默认规则集接受任何内容,因为VS 2013没有强制执行或注意任何特定样式?使用关键字this
可以明确显示变量存在的位置。如果变量的前缀不是this
、base
,或者类的名称(对于静态方法),则变量的作用域是局部的,与方法一样是全局的。这使得意图和可读性比省略更清晰。关键字在这种情况下非常有用:“限定用相似名称隐藏的成员”。此外,并非每个成员变量都是属性,有些属性可能有一个支持变量(对于不可变对象特别有用)。另外,为静态方法使用this
、base
和类名可以提高可读性并巩固意图。请注意,这必须应用于函数声明,而不是“违规”语句。尝试将其应用于语句将引发“CS7014:属性在此上下文中无效”。然而,这就是我一直在寻找的解决方案。谢谢
[SuppressMessage("IntelliSenseCorrection", "IDE0003", Justification = "Allowing this variable to consistency/readability of code.")]