2010-12-10 1 views
1

У меня есть следующий код, приведенный ниже, и он выглядел, чтобы очистить его, но я не уверен, нужно ли его очищать или нет.Создание строк внутри a для каждого цикла? или создать их снаружи, использовать внутри?

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

Что разница или эти две одинаковые?

+3

......... ildasm –

+2

...... или рефлектор. – Amy

+0

Думаю, вам не хватает кода в вашем примере. Что вы собираетесь делать с этими струнами? –

ответ

4

В первом сегменте кода, переменные будут доступны только внутри цикла. Во втором сегменте кода они могут быть доступны за пределами цикла. Это известно как Programming Scope

+0

как насчет системных ресурсов для переменных? если цикл продолжится в 1000 раз, это будет иметь значение? Я думаю, что рекультивация ресурсов произойдет после каждого цикла -am i correct? – kacalapy

+0

Согласно http://social.msdn.microsoft.com/forums/en-US/csharplanguage/thread/d43aaba5-a58b-4610-bea4-5bc5d6741f98 и http://stackoverflow.com/questions/407255/difference-between -declaring-variables-before-or-in-loop, это не имело бы значения. – npinti

3

Они скомпилируются до того же ИЛ ... нет разницы в производительности. Это было бы только удобочитаемо; если используется только в foreach ... сохраняйте декларацию там.

1

Если вы не захват переменные в лямбда/метод Анон это не имеет никакого значения. Внутри, пожалуй, чище.

В качестве побочного примечания; даже если вы объявите их наружу; вам не нужно инициализировать его там; справедливо следующее:

string s; 
foreach(...) { 
    s = ... 
} 

Я бы еще объявить внутри, хотя :)

0

В цепочках dotnet неизменяемы, поэтому оба примера кода собираются создавать новые объекты и назначать их двум переменным. Таким образом, если вы не используете эти 2 переменные за пределами цикла foreach, то не будет большой разницы.

0

Я думаю, что второй лучше. Потому что в первом случае вы создаете reference и object of string в цикле ... тогда как во втором случае вы просто создаете «объект строки», а ссылки просто меняются ...

Смежные вопросы