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);
浙公网安备 33010602011771号