然而,我的问题是每次迭代都会覆盖Old“line”值。
我将解释下面的代码。
public class Session
{
public String SessionId { get; set; }
public List<String> SessionLog { get; set; }
public Session()
{
SessionLog = new List<String>();
}
}
public List<Session> sessionMasterList = new List<Session>();
我有解析文件并获取sessionID的代码,并将它们放入不同的会话ID列表中。
然后我创建一个新的会话异议并添加填充session1.SessionID值,然后将其写入sessionMasterList。
List<String> distinctSessionID;
distinctSessionID = sessionIDList.Distinct().ToList();
Session session1 = new Session();
session1.SessionId = value;
sessionMasterList.Add(session1);
稍后在我的代码中我会浏览另一个文件,以便我可以填充SessionLog。我循环认为sessionMasterList并将sessionMasterList [i] .SessionId与sessionID进行比较。
for (int i = 0; i < sessionMasterList.Count; i++)
{
Console.WriteLine(sessionMasterList[i].SessionId);
if(sessionMasterList[i].SessionId == sID)
{
sessionMasterList[i].SessionLog.Add(line);
}
}
如果SessionMasterList [i] .SessionID与sID匹配,那么我想将SessionLog添加到该sessionID的SessionLogs的arraylist中。
然而,我的问题是在每次迭代时,Old值都被用于SEssionLogs的新值覆盖。
如何在循环中为SessionID获取SessionLogs的新条目。
答案 0 :(得分:0)
sessionMasterList.FirstOrDefault(p=>p.SessionId==sID)?.SessionLog.Add(line)
我仍然建议使用dictionaty而不是列表,这样你就可以制作,删除重复对象的可能性。此外,它还会减少操作次数,并且会以logN时间运行而不是N.
类似这样的事情
var sessionMaster = Dictionary<string, Session>();
sessionMaster[sid]?.SessionLog.Add(line);
编辑: 试试这个
var sessionMaster = Dictionary<string, Session>();
sessionMaster.Add("1", new Session(){SessiongLogs= new List<string>(){"a", "b"}};
sessionMaster.Add("2", new Session(){SessiongLogs= new List<string>(){"c", "d"}};
var sid = "1";
var line = "testLine"
sessionMaster[sid]?.SessionLog.Add(line);