如果我有这样的代码:
string s = MyClass.GetString(); // Returns string containing "hello world";
ProcessString(s);
这比这慢吗?
ProcessString(MyClass.GetString());
如果是这样,为什么?在第二个例子中,编译器通常是从GetString()生成一个变量;返回字符串的方法?
另外,尽可能晚地声明变量有什么好处?这对GC有益吗?如果是这样,我怎么样(根据GC gens的假设)?
由于
答案 0 :(得分:10)
不,编译器会为这两个示例发出相同的IL(不是所有这样的例子,请注意,具体说明这个例子)。
请记住,C#中的任何局部变量都会在方法顶部的IL中汇集在一起,所以当你声明它们并不重要,因为CLR会在输入方法时为它们分配空间。
尽可能晚地声明变量的好处仅仅是为了提高代码的可读性。声明变量尽可能接近它们的使用位置允许您的代码读者收集有关变量的内容信息,并且仅仅在变量名称之外。