如何 return while 循环中的值

How to return a value inside of while loop

我有一个方法,return类型是List<User>。在这种方法中,我有无限的 while 循环来通过套接字接受来自另一个客户端的信息。一旦新客户接受,我会将此用户添加到列表中并继续收听新客户。我给出了方法的构造。它应该接受多个客户端。现在,只允许我接受一个客户。之前,我们没有将类型设置为 List<User>,然后就没有 return UserList 并且整个代码在多用户下工作正常。添加return类型的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;
    }
}

如果您想完全使用此解决方案,您可以使用 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();
        }
    }

收拾一下

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;
}