如何在while循环中返回一个值

时间:2015-06-21 03:45:44

标签: c# while-loop return-value

我有一个方法,返回类型是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;
    }
}

2 个答案:

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