我正在用C#編寫遊戲服務器,每次有人用他的用戶名發送登錄消息時,我將他添加到ID爲IPENDPOINT,USERNAME的元組列表中。 我想檢查客戶端是否與已連接的客戶端沒有相同的用戶名,所以我試圖循環訪問列表並獲取list.Item3'這是用戶名',並使用String.Equals(list.Item3,username)檢查用戶名是否存在。 我的問題是當我循環,我的代碼只比較列表中的第一個元組,如果它是真的,然後發送錯誤消息,如果沒有,然後發送接受消息,當列表有+1客戶端它只比較第一個也接受即使元組2或3 ...具有該用戶名。 我嘗試過很多辦法,這是最後的代碼,我想:循環遍歷列表元組並添加(如果不匹配)
for (int i = 0; i < clientsInfoList.Count; i++)
{
bool isUsed;
if (String.Equals(clientsInfoList[i].Item3, Username))
{
isUsed = true;
}
if (isUsed)
{
Console.WriteLine("Username is already used!");
udpServer.Send(Encoding.ASCII.GetBytes("REFUSED"), Encoding.ASCII.GetByteCount("REFUSED"), remoteEP);
break;
}
else if(!isUsed)
{
clientsInfoList.Add(new Tuple<int, IPEndPoint, string>(id, remoteEP, Username));
Console.WriteLine("Username has been added to the list :)");
udpServer.Send(Encoding.ASCII.GetBytes("ACCEPTED"), Encoding.ASCII.GetByteCount("ACCEPTED"), remoteEP);
}
}
我試過很多其他方法,但我不能獲得驗證。 在此先感謝。
我試過你的解決方案,但我得到:使用未分配的局部變量'isUsed' – Adam 2015-03-08 21:09:31
我改變了'布爾isUsed'到'bool isUsed = false;'。試試看,並告訴我它是否有效。 – Szab 2015-03-08 21:11:30
'isUsed'仍然只會告訴我們,如果* *最後在'項目<>'使用該名稱。無論用戶看到什麼用戶名,循環都會繼續。 – 2015-03-08 21:14:31