我们使用Resharper和visual studio。我有以下代码
CMS.PortalEngine.PageInfo pageInfo = CMSContext.CurrentPageInfo;
然而,Resharper建议我改为
var pageInfo = CMSContext.CurrentPageInfo;
为什么?我想通过声明pageInfo var,是不是编译器会将它绑定到RunTime的实际类型?怎么效率更高?
请分享您对此的看法
答案 0 :(得分:0)
使用var
与编译的代码无关,或者它的效率如何。它有时是强制性的 - 在处理匿名类型时 - 但使用不正确它将无法编译。如果它确实编译了,那么如果你在赋值的RHS上明确使用了表达式的类型,它将产生与它相同的代码。
有时,您可能希望在赋值的LHS上显式指定接口或超类型,并利用隐式转换。这与var的使用没有相当的干净。 e.g。
/* Given these classes */
class Animal {}
class Dog : Animal {}
/* This has no simple var equivalent */
Animal animal = new Dog();
/* Since this would make animal of type Dog */
var animal = new Dog();
/* But you can do this - don't why you'd want to though */
var animal = (Animal)new Dog();
在大多数情况下,使用var只是风格问题。
在Resharper中,您可以决定如何指示使用var的机会 - 请参阅设置>代码Insepction>检查严重性,其中两个条目属于var:
您可以根据需要更改这些内容。