在foreach循环中创建字符串?或者在外面创建它们,在里面使用?

时间:2010-12-10 19:15:30

标签: c# asp.net

我在下面有以下代码并且看起来要清理它,但我不确定它是否需要清理。

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();
}

差异是什么,还是这两个相同?

6 个答案:

答案 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)

我认为第二个更好。因为在第一个中,您在循环中创建referenceobject of string ...而在第二种情况下,您只是创建'字符串对象'而引用只是在改变...