Roslyn代码分析器 - 何时应该使用"this."?

ser*_*0ne 12 .net c# roslyn c#-6.0 roslyn-code-analysis

在使用实例成员时,我总是明确地使用我的代码,在它们前面this.加上静态成员,并在前面添加类型名称.

罗斯林似乎不喜欢这一点,并礼貌地建议你可以省略this.,并Type.从你的代码在适当情况下...

......所以我会这样做... (没有双关语意)

public void DoSomethingCool()
{
    this.CallAwesomeMethod();
    CoolCucumber.DoSomethingLessAewsome();
}
Run Code Online (Sandbox Code Playgroud)

... roslyn建议我这样做......

public void DoSomethingCool()
{
    CallAwesomeMethod();
    DoSomethingLessAwesome();
}
Run Code Online (Sandbox Code Playgroud)

...但是当谈到使用扩展方法时,似乎我不能省略this.例如...... 的使用

public int GetTotal()
{
    // This doesn't work    
    return Sum(o => o.Value);

    // This does
    return this.Sum(o => o.Value);
}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 为什么罗斯林似乎不喜欢明确使用this.Type.
  2. 为什么我需要明确this.用于扩展方法?
  3. 虽然这个问题没有严格的一部分,我怎么解决不想我用罗斯林之间的差异this.Type.和了StyleCop的分析仪坚持,我使用它们?

Pat*_*man 8

你对这种行为是正确的.使用Visual Studio 2015时,它也让我感到震惊,我也想到了和你一样.以下是我对此的看法:

  1. 为什么罗斯林似乎不喜欢明确使用this.Type.

    这是开销,似乎它想要最小化所需的代码.我喜欢在我的代码中明确表达.在不知道其余代码的情况下,更容易理解变量的范围.(也许这也是让我们了解代码分析器的营销策略......或者我在想太多)

  2. 为什么我需要明确this.用于扩展方法?

    我想这是提供扩展方法的第一个参数的规则this.没有提供this它就不知道调用该方法的上下文.实际上,扩展方法this.Sum(x => x)实际上被重写为Enumerable.Sum(this, x => x).看到'需要'是为了this什么?我想在技术上可以省略这一点,但我更喜欢在这种情况下明确,我很高兴编译器也这样做.