为什么Resharper建议我使用var而不是实际类型?

时间:2013-10-22 21:44:14

标签: visual-studio-2012 runtime resharper

我们使用Resharper和visual studio。我有以下代码

 CMS.PortalEngine.PageInfo pageInfo = CMSContext.CurrentPageInfo;

然而,Resharper建议我改为

 var pageInfo = CMSContext.CurrentPageInfo;

为什么?我想通过声明pageInfo var,是不是编译器会将它绑定到RunTime的实际类型?怎么效率更高?

请分享您对此的看法

1 个答案:

答案 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:

  • 初始化显式声明类型时使用'var'关键字(默认为建议)
  • 尽可能使用'var'关键字(默认为提示)

您可以根据需要更改这些内容。