<T>
목록에 유형 을 추가하면 추가 되는 다른 값을 여러 번 덮어 쓰는 이유를 찾을 수없는 것 같기 때문에 코드에 대한 도움이 필요합니다 .
아래는 내 코드입니다.
public IEnumerable<T> Query<T>(string query, object parameters = null) where T : new()
{
var lists = new List<T>();
var ObjType = new T();
var ObjProps = ObjType.GetType().GetProperties();
int Objlen = ObjProps.Length;
if (parameters == null)
{
DBConnection.Open();
using (MySqlTransaction mysqlTransaction = DBConnection.BeginTransaction(System.Data.IsolationLevel.ReadCommitted))
{
try
{
using (MySqlCommand command = new MySqlCommand(query, DBConnection))
{
command.Transaction = mysqlTransaction;
using (MySqlDataReader dataReader = command.ExecuteReader())
{
if (dataReader.HasRows)
{
while (dataReader.Read())
{
for (int i = 0; i < dataReader.FieldCount; i++)
{
var dataValue = dataReader.GetValue(i);
ObjProps.FirstOrDefault(p => p.Name == dataReader.GetName(i)).SetValue(ObjType, dataValue);
}
lists.Add(ObjType);
}
}
}
}
}
catch (Exception)
{
mysqlTransaction.Rollback();
DBConnection.Close();
throw;
}
finally
{
if (DBConnection != null)
{
DBConnection.Close();
}
}
}
}
return lists;
}
내 코드에서 논리 오류를 찾을 수없는 것 같습니다. 코드를 실행하면 목록에 처음 추가해도 괜찮습니다.
그러나 for 루프에 대해 다시 반복하자마자 값을 덮어 쓰는 것처럼 보였고 왜 이런 일이 발생하는지에 대한 단서조차 없습니다.
아래는 사진입니다.
어떤 도움 / 설명 / 답변이라도 대단히 감사합니다.
라인 var ObjType = new T();
은 상단이 아닌 while 루프 내부에 있어야합니다. 그렇지 않으면 동일한 객체를 수정하고 새 객체를 추가하지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다