C#将新条目添加到List <string>而不覆盖旧值

时间:2016-02-01 21:18:21

标签: c# list

然而,我的问题是每次迭代都会覆盖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的新条目。

1 个答案:

答案 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);