C# C sharp代码清理:resharper

C# C sharp代码清理:resharper,c#,resharper,C#,Resharper,我刚用过它,它让我觉得我根本不知道如何用C#编写代码;它给了我很多建议;其中很少有: 1) SomeObject o=newsomeobject() Resharper将转换为: var o = new SomeObject() 2) this.Loaded+=newroutedEventHandler(主页_-Loaded) 到 3) 转换我的变量并将u放在所有实例变量前面 4) 正在删除类父级的名称。我在Silverlight上测试了这个 public partial class Main

我刚用过它,它让我觉得我根本不知道如何用C#编写代码;它给了我很多建议;其中很少有:

1)
SomeObject o=newsomeobject()

Resharper将转换为:

var o = new SomeObject()
2)
this.Loaded+=newroutedEventHandler(主页_-Loaded)

3) 转换我的变量并将u放在所有实例变量前面

4) 正在删除类父级的名称。我在Silverlight上测试了这个

public partial class MainPage : UserControl

5) 替换实例变量

 this.variable = somevalue


所有这些真的有必要吗?这真的会影响我程序的效率吗?我的意思是用
var
关键字替换我的类名会有什么好处。毕竟,
var
在编译时也被类名替换。它这样做是因为它被编程来做,还是这些事情真的会以某种或另一种方式影响?

所有这些更改都不会对编译的CIL代码产生任何影响-它们只是ReSharper对C代码本身可读性的看法


您可以调整所有这些设置以满足您或您所在部门的需要。在很大程度上,这是个人偏好的问题。

它们不是必需的

它们遵循resharper制定的编码标准。很好的一点是,您可以按照自己的方式配置编码标准

然而,resharper的美妙之处在于,你最终学会了用不同的方式做一些你一直以某种方式做的事情

所有这些真的有必要吗

没有必要

这真的会影响我程序的效率吗

它不会以改变性能或语义的方式影响编译后的代码

我的意思是用
var
关键字替换我的类名会有什么好处。毕竟,var在编译时也被替换为类名

更可读的代码

它这样做是因为它已经被编程来做,还是这些事情真的以某种或另一种方式影响

对。如果您不喜欢,这些是可配置的

1) 没关系

第一个
SomeObject
是冗余的、无用的,而使用
var
时,它的可读性不低,也可以说更具可读性。对于复杂的定义,如

var dictionary = new Dictionary<string, Dictionary<string, List<string>>();
优先于

var s = "s";
原样

结束

注意

var i = 2147483648;
这真的很糟糕,因为现在还不清楚
i
的类型。对于非复杂的定义,我更喜欢使用显式类型而不是隐式类型。另外,有时候你想说

IFoo foo = new Foo();
显式键入
foo
an
IFoo
,而
var
则将其键入
foo

2) 通常代码越少越好

3) 我讨厌这个建议。我讨厌开头的下划线。我对我的成员变量使用通常的命名约定,为了清晰起见,我在它们前面加上
this
。我会关掉这个

public SomeObject(string name) {
    this.name = name;
}
它的可读性比

public SomeObject(string name) {
    _name = name;
}
在我看来

4) 等等,它为什么要这样做?我对这个有点困惑。因为它是局部的,而类定义的另一部分具有继承性?我无法想象它在改变语义的情况下会这样做。我会关掉这个

public SomeObject(string name) {
    this.name = name;
}

5) 我不喜欢这个(见3。)

此行为在ReSharper设置中都是可配置的。代码清理规则(例如,是否用var替换usage-我不这样做!)、代码样式规则(例如,变量命名)和格式规则(例如,如何放置大括号)混合在一起

我写了一篇文章,概述了这些设置,以及如何使用它们形成编码标准,然后通过代码清理自动应用这些设置:


归根结底,他们中的许多人关心的是编码风格和删除冗余代码,他们对编译后的代码没有影响。您可以根据您或您的团队的编码风格对其中的许多代码进行配置。

我真的怀疑第4点。它破坏了继承。@Madhur:只有当分部类的另一部分声明为从UserControl继承时,它才会这样做。@Madhur:+1关于Joe的评论。别忘了这个类是“Partial”。@madhur它是一个Partial类-resharper将确保没有重复声明。感谢大家对#4的澄清:正如在OP上的评论中指出的,resharper只在基类由Partial类的另一部分声明时才建议这样做。在这种情况下,我几乎可以保证我们看到的是WPF UserControl背后的代码,它的XAML前端声明了基类。@djacobson:啊,谢谢。就我个人而言,我认为基类的冗余语句更清楚。Re#4,我总是删除冗余基类。如果我以后想将窗口更改为UserControl,或者将UserControl更改为页面,那么就更容易了——我只需要更改XAML,一切都正常。如果保留冗余“:UserControl”,则需要在两个位置(XAML和codebehind)对其进行更改。干的
var i = 5;
int i = 5;
var i = 2147483648;
IFoo foo = new Foo();
public SomeObject(string name) {
    this.name = name;
}
public SomeObject(string name) {
    _name = name;
}