C# var ByteArray VS byte[]数组:垃圾收集器行为

C# var ByteArray VS byte[]数组:垃圾收集器行为,c#,garbage-collection,C#,Garbage Collection,上周,我做了一次代码面试 我的采访者说: “你喜欢哪一种 var byteArray = myFunction(); and byte[] Array = myFunction();" ? 我回答说,一旦编译,这些行就会给出相同的结果 我的采访者说:“是的,但它们的垃圾处理方式不同:var byteArray更好,因为GC会很快地垃圾处理变量。” 我非常惊讶的是,两行代码在编译后给出相同的结果,但它们并没有以相同的方式被丢弃,但也许我错了 那么:它们是否以同样的方式被垃圾处理?如果

上周,我做了一次代码面试

我的采访者说: “你喜欢哪一种

  var byteArray = myFunction();
  and
  byte[] Array = myFunction();" ?
我回答说,一旦编译,这些行就会给出相同的结果

我的采访者说:“是的,但它们的垃圾处理方式不同:var byteArray更好,因为GC会很快地垃圾处理变量。”

我非常惊讶的是,两行代码在编译后给出相同的结果,但它们并没有以相同的方式被丢弃,但也许我错了


那么:它们是否以同样的方式被垃圾处理?如果不是,你能解释一下原因吗?

是的,它们是以同样的方式被垃圾处理的。相同的类型,相同的行为。这是一个编译器的特性:一旦编译,就没有什么东西能让一个代码与另一个代码不同。

它们完全相同,假设没有隐式转换到
 涉及字节[]
。它们没有办法不同,因为
var
只是语法上的糖分,可以用适当的类型来代替。

你的面试官不正确

在您的特定情况下,
var
代表
byte[]
。代码是等效的


也许你的面试官错误地认为,从某种意义上说,第一个案例创造了一个对象,但第二个案例创造了几个。当然,这是胡说八道。

@Christophe:你只能(带绿色复选标记的那一个)。你可以胜过所有其他人。接受对你帮助最大的答案。没问题。因此,这可能是一个很难理解的地方,但一旦你做到了,它就很有趣。值得一提的是,我也最喜欢这个答案:它专注于事实。投上一票。必须表明两种代码生成的代码相同(生成相同的IL汇编代码…句子被截断:-()