我在下面有以下代码并且看起来要清理它,但我不确定它是否需要清理。
foreach (SearchResult sr in mySrchColl)
{
string strValIn = sr.Properties["in"][0].ToString();
string strValOut= sr.Properties["out"][0].ToString();
}
我将此更改为以下内容:
string strValIn = "";
string strValOut= "";
foreach (SearchResult sr in mySrchColl)
{
strValIn = sr.Properties["in"][0].ToString();
strValOut= sr.Properties["out"][0].ToString();
}
差异是什么,还是这两个相同?
答案 0 :(得分:4)
在第一个代码段中,变量只能在循环中访问。在第二个代码段中,可以在循环外访问它们。这称为Programming Scope
答案 1 :(得分:3)
他们编译成相同的IL ...没有性能差异。它只是可读性;如果仅用于foreach ......请在那里保留声明。
答案 2 :(得分:1)
答案 3 :(得分:1)
如果你没有将变量捕获到lambda / anon方法中,它将没有任何区别。里面可以说更清洁了。
作为旁注;即使你在外面声明它们;你不需要在那里初始化;以下是有效的:
string s;
foreach(...) {
s = ...
}
我仍然会在里面声明:)
答案 4 :(得分:0)
在dotnet中,字符串是不可变的,因此两个示例代码都将创建新对象并将它们分配给2个变量。因此,如果你没有在foreach循环之外使用这两个变量,那么就不会有太大的不同。
答案 5 :(得分:0)
我认为第二个更好。因为在第一个中,您在循环中创建reference
和object of string
...而在第二种情况下,您只是创建'字符串对象'而引用只是在改变...