Aak*_*shM 52
可能有效的方法是编写这两种方法:
public static void WithInt()
{
int x = 5;
Console.WriteLine(x);
}
public static void WithVar()
{
var x = 5;
Console.WriteLine(x);
}
Run Code Online (Sandbox Code Playgroud)
编译,并用于ildasm检查生成的CIL.告诉你的老板.
cjk*_*cjk 37
接下来是Aakash的回答,这是IL :(谢谢LINQPad)
WithInt:
IL_0000: ldc.i4.5
IL_0001: stloc.0
IL_0002: ldloc.0
IL_0003: call System.Console.WriteLine
IL_0008: ret
WithVar:
IL_0000: ldc.i4.5
IL_0001: stloc.0
IL_0002: ldloc.0
IL_0003: call System.Console.WriteLine
IL_0008: ret
Run Code Online (Sandbox Code Playgroud)
Dan*_*ker 32
为什么这么多人被愚蠢的老板诅咒?革命,兄弟们!
你的老板需要阅读文档.var使编译器通过查看初始化表达式的静态类型来找出变量类型.无论您是手动指定类型还是使用它var并让编译器为您解决,它在运行时都没有丝毫差异.
更新在问题的评论中,汉斯帕斯特问道
你能想到任何导致拳击而不使用演员阵容的var初始化器吗?
强制执行此类转换的自包含表达式的示例是:
var boxedInt = new Func<int, object>(n => n)(5);
Run Code Online (Sandbox Code Playgroud)
但这与以下内容完全相同:
object boxedInt = new Func<int, object>(n => n)(5);
Run Code Online (Sandbox Code Playgroud)
换句话说,这实际上并没有任何关系var.我的初始化表达式的结果是object,因此var必须使用它作为变量的类型.它不可能是其他任何东西.
Bri*_*sen 32
这根本不是真的.
var只是意味着"亲爱的编译器,我知道这种类型是什么,你也是,所以让我们继续吧."
它使代码更短,有些人发现它更具可读性(其他人发现它更不易读),但是没有任何性能损失.
Dar*_*mas 10
也许你的老板是一个旧的Visual Basic(在<= 6.0中)程序员习惯了这种VARIANT类型.如果你没有在DIM语句中明确指定变量VARIANT的类型,union那么如果我没记错的话,它就是一种类型.将这些变量传递给函数时,您可以将其视为一种"装箱"和"拆箱".
有时人们会感到困惑.向你的老板询问他的Visual Basic战争故事.聆听,学习并同时获得一些同情!当您离开办公室时,您可以指出c#编译器在编译时将这些东西计算出来并且"装箱"不再是问题.
不要指望你的老板必须跟上语言/ API的最新变化.这不是愚蠢的.这是关于还有其他事情要做.比如他的工作.
编辑:如下面的评论中所述,但是,告诉你不要var因为错误的原因而使用可能不是他的工作......