Что лучше в цикле: использовать один и тот же объект или создавать новый объект на каждой итерации? - PullRequest
0 голосов
/ 12 августа 2010

В приведенных ниже примерах первый подход создает объект типа SearchResult для каждой итерации, тогда как последний создает объект только один раз и использует его для всех итераций.

using (DbDataReader reader = (DbDataReader)dbObject.ExecuteReader(command))
        {
            if (reader.HasRows)
            {
                List<SearchResult> searchResults = new List<SearchResult>();
                while (reader.Read())
                {
                    SearchResult searchResult = new SearchResult();
                    searchResult.AppName = Convert.ToString(reader["AppName"]);
                    searchResults.Add(searchResult);
                }
            }
        }

ИЛИ

using (DbDataReader reader = (DbDataReader)dbObject.ExecuteReader(command))
        {
            if (reader.HasRows)
            {
                List<SearchResult> searchResults = new List<SearchResult>();
                SearchResult searchResult = new SearchResult();
                while (reader.Read())
                {                        
                    searchResult.AppName = Convert.ToString(reader["AppName"]);
                    searchResults.Add(searchResult);
                }
            }
        }

Какой лучший способ справиться с этим?

Спасибо и любезно игнорируйте мою наивность.:)

1 Ответ

5 голосов
/ 12 августа 2010

Первый подход лучше, так как второй не будет работать так, как задумано, поскольку вы используете один и тот же экземпляр каждый раз и перезаписываете свойство.В итоге вы получите список SearchResult с одинаковым значением!Так что, безусловно, первая версия.

Вам необходимо использовать первую версию или каждый раз создавать новый экземпляр, например:

SearchResult searchResult;
while (reader.Read())
{
      searchResult = new SearchResult();
      searchResult.AppName = Convert.ToString(reader["AppName"]);
      searchResults.Add(searchResult);
}

РЕДАКТИРОВАТЬ Это, конечно, предполагаетSearchResult - это класс, если это на самом деле структура, то это тип значения, и это не будет проблемой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...