Die*_*kes 0 c# coding-style object
在下面显示的示例中,前一种方法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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
要么
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
哪种方法更好?
谢谢,请理睬我的天真.:)
第一种方法更好,因为第二种方法不会像预期的那样工作,因为每次使用相同的实例而不是写入属性.你最终会得到一个具有相同价值的SearchResult列表!所以绝对是第一个版本.
您需要使用第一个版本或每次实例化一个新实例,如下所示:
SearchResult searchResult;
while (reader.Read())
{
searchResult = new SearchResult();
searchResult.AppName = Convert.ToString(reader["AppName"]);
searchResults.Add(searchResult);
}
Run Code Online (Sandbox Code Playgroud)
编辑 这当然SearchResult是假设是一个类,如果它实际上是一个结构,那么它是一个值类型,这不会是一个问题