resharper改善代码建议(待更新)

alt+enter只是建议方式,不能全信,要根据实际情况。

举2个代码优化中的例子:

一、var的应用

①参考链接:http://www.infoq.com/cn/news/2008/05/CSharp-var

观点:过度使用var会使得源代码晦涩难懂。只有在必要的时候,才推荐使用var,也就是说当变量用来存储一个匿名类型或者匿名类型集合的时候。

ps:机器看起来都无所谓的时候,为了降低维护成本,我推荐在知道简单类型(比如int,string,double)的情况下,尽量用已知的类型,其他时候,比如ObservableCollection这样比较长的数据类型的时候直接用var代替就好了,因为var会在编译时进行强类型转换了。

②参考链接:http://www.shenlanit.com/articles/csharp-net-framework-var.html

c#3.0后新增的var,作用和js中的作用不同,js中是弱类型,c#中是强类型。

注意:

1.必须在定义时初始化。也就是必须是var s = “abcd”形式,而不能是如下形式:
var s;
s = “abcd”; 
2. 一但初始化完成,就不能再给变量赋与初始化值类型不同的值了。
3.var要求是局部变量。
4.使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样。但笔者建议如果事先知道变量的类型,尽量使用强类型方式来声明变量。否则,就会造成由于大量使用var,而使得开发人员很难断定某个变量是什么类型。这样不利于程序的维护和升级。

二、string本地化的问题

这个在resharper中只要有tostring()的地方都默认建议给初始化,但是我发现,在linq语句中使用的话,会报错,所以,慎用ToString(CultureInfo.InvariantCulture),直接用tostring()就可以。

原因是:Method 'System.String ToString(System.IFormatProvider)' has no supported translation to SQL.(这个方法没法从linq解析成sql)

三、c#命名对应不了xaml的问题

如果xaml部分用了类似Text={binding PropertyName};在用resharper规范c#的时候,是没法一块更改PropertyName的大小写或者名字的。

四、resharper给的静态变量声明建议

eg:

string str=“abc”;

resharper建议:const string str="abc";

 五、关于linq的用法

resharper中给的建议比较高端,例如:

var aa = from a1 in contact.Table2
join a2 in contactstable on a1.Classid equals person.Classid
select a1.Classname;

等价于:

var aa = contact.Table2.Join(contactstable, a1 => a1.Classid, a2 => person.Classid,
(a1, a2) => a1.Classname);

posted on 2014-05-07 14:27  鸣动我心  阅读(1326)  评论(0)    收藏  举报