我有一个方法,返回类型是List<User>
。在这个方法中,我有无限的while循环来接受来自另一个客户端的信息。新客户端接受后,我会将此用户添加到列表中并继续侦听新客户端。我给出了方法的构造。假设接受多个客户端。现在,只允许我接受一个客户。之前,我们没有将类型设置为List<User>
,然后没有return UserList
,并且整个代码适用于多个用户。添加返回类型的Method后,它不起作用。
public List<User> accept() {
List<User> userList = new List<User>();
while (true) {
Command_Listening_Socket = server.Accept();
int msgLenght = Command_Listening_Socket.Receive(msgFromMobile);// receive the byte array from mobile, and store into msgFormMobile
string msg = System.Text.Encoding.ASCII.GetString(msgFromMobile, 0, msgLenght);// convert into string type
if (msg == "setup") {
my_user = new User();
userList.Add(my_user);
}
return userList;
}
}
答案 0 :(得分:2)
如果您想要使用此解决方案,可以使用yield return
代替return
语句。
但是你需要在它之外迭代Accept()方法的结果。
但是,对这种类型的代码结构使用基于事件的解决方案是很好的。
public class Program
{
public static IEnumerable<object> Accept()
{
var userList = new List<object>();
var index = 0;
while (true)
{
var msg = "setup";
if (msg == "setup")
{
var returnUser = new
{
Name = "in method " + index
};
Thread.Sleep(300);
yield return returnUser;
}
index++;
}
}
private static void Main(string[] args)
{
foreach (var acc in Accept())
{
Console.WriteLine(acc.ToString());
}
Console.WriteLine("Press any key to continue.");
Console.ReadLine();
}
}
答案 1 :(得分:-1)
把它包起来
public void accept()
{
List<User> users = new List<User>();
while (true)
{
var user = _accept()
if(user != null)
{
users.Add(user)
}
}
}
public User _accept()
{
User my_user = null;
Command_Listening_Socket = server.Accept();
int msgLenght = Command_Listening_Socket.Receive(msgFromMobile);// receive the byte array from mobile, and store into msgFormMobile
string msg = System.Text.Encoding.ASCII.GetString(msgFromMobile, 0, msgLenght);// convert into string type
if (msg == "setup")
{
my_user = new User();
}
return my_user;
}