【问题标题】:why is Resharper recommending me to use var instead of the actual type? [duplicate]为什么 Resharper 建议我使用 var 而不是实际类型? [复制]
【发布时间】:2013-10-22 21:44:13
【问题描述】:

我们将 Resharper 与 Visual Studio 结合使用。我有以下代码

 CMS.PortalEngine.PageInfo pageInfo = CMSContext.CurrentPageInfo;

但是,Resharper 建议我改成

 var pageInfo = CMSContext.CurrentPageInfo;

这是为什么呢?我想通过声明 pageInfo var,编译器不会将它绑定到运行时的实际类型吗?怎样更有效率?

请分享您对此的看法

【问题讨论】:

    标签: visual-studio-2012 runtime resharper


    【解决方案1】:

    var 的使用与编译后的代码或其效率无关。它有时是强制性的——在处理匿名类型时——但使用不正确它不会编译。如果它确实编译,它将产生与您在赋值的 RHS 上显式使用表达式的类型时相同的代码。

    有时,您可能希望在赋值的 LHS 上显式指定接口或超类型并利用隐式强制转换。这与使用 var 没有明确的等价物。例如

    /* 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 的机会 - 查看 Settings>Code Insepction>Inspection Severity,其中两个条目与 var 相关:

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

    您可以随意更改这些。

    【讨论】:

    • 但是假设你使用 "var" ,它是隐式转换的,应该是显式转换的。因此,在运行时,编译器运行后,您仍然必须在运行时进行类型转换。我相信这就是正在发生的事情。如果我错了,请随时纠正我
    • 你错了。 var 在运行时什么也不做。它是编译器读取然后推断出预期类型的​​关键字。它只有具有编译时语义。见stackoverflow.com/questions/3632918/…
    猜你喜欢
    • 2011-06-19
    • 2014-07-17
    • 2012-05-21
    • 2015-04-25
    • 2017-01-27
    • 2019-01-20
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多