读书人

问一个关于Linq的小疑点.(select not

发布时间: 2013-11-15 22:28:15 作者: rapoo

问一个关于Linq的小问题.(select not like)
本帖最后由 diaodiaop 于 2013-11-14 13:30:59 编辑 我有一个全局的集合


static Dictionary<string, Socket> ClientList = new Dictionary<string, Socket>();

每次有客户端连接 我都会用ip:port当作key 当前连接当作value

var client= ar.AsyncState as Socket;
var ipport = client.RemoteEndPoint.ToString();
ClientList.Add(ipport, client);

但是现在有个需求,就是一个IP只能连接一次.新连接的如果跟前面的IP有一样的,那么删除原来的key

保证ClientList里面的IP都不同.

实际上 我用for循环判断可以移除,但是这个ClientList会很大很大,几万几十万几百万.

所以求一个Linq语句找到IP一样的删除之后在添加新的..

比如

var ip=1;
var port=2;
var new=ClientList.select("key not like " +ip+"%");
new.add(ip+":"+port,client);
Client=new;

我是瞎写的 差不多这个意思..

[解决办法]

private void InsertNewIP(string sIp, string sPort, Socket newSocket)
{
string sFindKey = ClientList.Keys.Where(x => x.Substring(0, x.IndexOf(':')) == sIp).SingleOrDefault();
if (sFindKey == null)
{
ClientList.Add(sIp + ":" + sPort, newSocket);
}
else
{
ClientList.Remove(sFindKey);
ClientList.Add(sIp + ":" + sPort, newSocket);
}
}

读书人网 >C#

热点推荐