构建没有&;if&;的算法
本文关键字:算法 if 构建 | 更新日期: 2023-09-27 17:51:18
有List<IClient>
和List<ClientName>
当新客户端连接到Service(Server)时,新客户端的名称将被写入会话中的所有客户端。但新客户只能得到你自己。我有:
foreach (IClientCallBack client in listClientCallBacks)
{
if (client == listClientCallBacks.Last())
{
foreach (var n in listClientsName)
{
client.Enter(n);
}
return;
}
client.Enter(name);
}
请提示在这种情况下是否有没有if
的变体?提前感谢。PS:抱歉我的英语水平。
如果你真的想删除如果你可以写两个单独的循环(这并不意味着你有显著的性能下降,因为你的代码也执行两个循环),是的,如果我猜对了你的意图,使用这个逻辑更清楚。
// Get directly the last one and add the clients name already in the 'session'
// to this element. I suppose that the last one need to be informed of the
// clients already in the list.....
IClientCallBack client in listClientCallBacks.Last();
foreach (var n in listClientsName)
client.Enter(n);
// Now for every client in the session EXCLUDING the last one
// inform them of the new client that has joined your 'session'
foreach (IClientCallBack client in listClientCallBacks.Take(listClientCallBacks.Length - 2))
client.Enter(name);
foreach
循环可能非常有用,但在某些情况下,良好的旧for
循环也有其优势。例如,当您不处理集合中的每一项时,或者您需要当前元素的索引时。
如果我正确理解了你的问题,你需要对最后一个元素进行特殊处理:
// first until second last element
int secondLastIndex = listClientCallBacks.Count - 2;
for (int index = 0; index <= secondLastIndex; index++)
{
IClientCallBack client = listClientCallBacks[index];
client.Enter(name);
}
// last element
if (listClientCallBacks.Count > 0)
{
IClientCallBack lastClient = listClientCallBacks.Last();
foreach (var n in listClientsName)
{
lastClient.Enter(n);
}
return;
}