使用var实际上是慢吗?如果是这样,为什么?

PRA*_*T P 4 c# var

我正在学习C#和.NET,我经常var在我的代码中使用该关键字.我从Eric Lippert那里得到了这个想法,我喜欢它如何提高代码的可维护性.

我很想知道,虽然......很多关于缓慢堆位的引用的博客都写过,但我自己并没有观察到这一点.这实际上很慢吗?我指的是由于类型推断导致编译时间慢.

Mar*_*ell 17

你说:

由于类型'推理',我指的是编译时间慢

这不会减慢编译器的速度.编译器已经有知道表达式的结果类型,以便检查兼容性分配的(直接或间接).在某些方面,使用这种已知类型会删除一些东西(例如,可能需要检查继承,接口和转换运算符).

它也不会减慢运行时间; 它们是完全静态编译的,就像常规的c#变量(它们是).

简而言之...... 事实并非如此.


n8w*_*wrl 14

C#中的'var'不像你在VB中习惯的VARIANT.var是简单的语法糖,编译器允许您使用它来缩写类型.编译器会计算表达式右侧的类型,并将变量设置为该类型.它根本没有性能影响 - 就像你输入完整类型表达式一样:

var x = new X();
Run Code Online (Sandbox Code Playgroud)

完全一样的

X x = new X();
Run Code Online (Sandbox Code Playgroud)

这似乎是一个微不足道的例子,而且确实如此.当表达式更加复杂甚至"无法表达"(如匿名类型)和枚举时,这真的很闪耀.

  • 我最近被问到"为什么要使用var",我很想在匿名类型上挥手致意.但是,我认为一个更实际的用法示例是插入支持的LINQ表达式 - 其中返回类型很难从查询中手动推断.这可能只是因为我向一个C程序员(c#的新手)解释了匿名类型会被杀死的人. (2认同)

Mik*_* M. 7

在编译时将Var替换为您的实际变量类型.你在想dynamic吗?