Roslyn代码分析器-我应该在什么时候使用“;这个&”;
本文关键字:这个 什么时候 分析器 代码 我应该 Roslyn | 更新日期: 2023-09-27 18:21:34
在使用实例成员时,我总是对代码进行显式处理,在它们前面加上this.
和静态成员,在它们之前加上类型名。
Roslyn似乎不喜欢这样,并礼貌地建议您可以在适当的情况下从代码中省略this.
和Type.
。。。
所以我会在哪里做这个(无意双关)
public void DoSomethingCool()
{
this.CallAwesomeMethod();
CoolCucumber.DoSomethingLessAewsome();
}
罗斯林建议我这样做。。。
public void DoSomethingCool()
{
CallAwesomeMethod();
DoSomethingLessAwesome();
}
然而,当谈到使用扩展方法时,我似乎不能省略this.
的使用,例如。。。
public int GetTotal()
{
// This doesn't work
return Sum(o => o.Value);
// This does
return this.Sum(o => o.Value);
}
问题:
- 为什么Roslyn似乎不喜欢明确使用
this.
和Type.
- 为什么我需要显式地将
this.
用于扩展方法 - 虽然不是这个问题的严格组成部分,但我如何解决Roslyn不希望我使用
this.
和Type.
与StyleCop的分析器坚持让我使用它们之间的差异
您的行为是正确的。当我使用Visual Studio 2015时,它也让我印象深刻,我和你一样想知道。以下是我的想法:
-
为什么Roslyn似乎不喜欢明确使用
this.
和Type.
?这是一种开销,而且它似乎想尽量减少所需的代码。不过,我更喜欢在代码中显式。在不了解其余代码的情况下,理解变量的范围要容易得多。(也许这也是一种营销策略,让我们了解代码分析器…或者我想得太多了吗)
-
为什么我需要显式地将
this.
用于扩展方法?我想这就是提供扩展方法的第一个参数
this
的规则。如果不提供this
,它就不知道调用该方法的上下文。实际上,扩展方法this.Sum(x => x)
实际上被重写为Enumerable.Sum(this, x => x)
。看到this
的"需求"了吗?我想在技术上省略这一点是可能的,但在这种情况下我也更喜欢显式,我很高兴编译器也这样做了。
this.
是C#中提供的一种语法,用于解决歧义。例如:
class Square
{
private int size;
public Square(int size)
{
size = size; // How do we differentiate member and parameter?
}
}
因此,使用this.
显式是一种矛盾修饰法,因为它解决了由缺乏明确性引起的问题。
我建议的"最佳实践"是首先编写不含糊的代码,这样就不需要使用this.
。歧义不仅是编译器不喜欢的,而且对于其他试图阅读代码的程序员来说,它可能会非常令人困惑。
为了消除歧义,我们需要对成员变量和参数等使用不同的名称。最常见的方法(除了this.
)是使用命名前缀来标识成员。许多程序员不喜欢前缀,但这通常是因为他们从未见过/使用过设计良好的前缀系统——我在这里描述了我的方法,一旦你习惯了它,它是一种非常强大的方式,可以向你自己和你的队友传达有用的信息,并消除由歧义和混淆引起的几种常见错误。