2015-06-21 50 views
0

我有一個方法,返回類型是List<User>。在這個方法中,我有無限的while循環通過套接字接受來自另一個客戶端的信息。一旦新客戶接受,我會將此用戶添加到列表中,並繼續收聽新客戶。我給這個方法的構造。假設接受多個客戶。現在,只允許我接受一個客戶。之前,我們沒有將類型設置爲List<User>,然後沒有return UserList,並且整個代碼對多個用戶都正常工作。添加返回類型的Method後,它不起作用。如何在while循環中返回一個值

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

回報用戶列表,而不是在UserList? (大寫字母) – Bob

+0

不,類型錯誤 –

+0

如果沒有返回,退出條件是什麼? – Ediac

回答

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

就包起來

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; 
} 
相關問題