2016-06-26 7 views
-2

Es gibt List<IClient> und List<ClientName> Wenn der neue Client mit Service (Server) verbinden, wird der Name eines neuen Clients auf alle Clients geschrieben, die in der Sitzung ist. Aber neue Kunden bekommen nur sich selbst. ich habe:Build-Algorithmus ohne "wenn"

foreach (IClientCallBack client in listClientCallBacks) 
{ 
    if (client == listClientCallBacks.Last()) 
    { 
     foreach (var n in listClientsName) 
     { 
      client.Enter(n); 
     } 
     return; 
    } 

    client.Enter(name); 
} 

Bitte prompt gibt es Varianten ohne if in diesem Fall? Vielen Dank im Voraus. PS: Sorry für mein Englisch Sprachniveau.

+1

@CodeCaster es eine Rückkehr hat, wenn das Element die letzte in der Reihenfolge übereinstimmt – dotctor

Antwort

0

Wenn Sie wirklich wollen, um zu entfernen, dass wenn Sie zwei separate Schleifen schreiben könnte (das nicht, dass Sie eine erhebliche Leistungseinbuße bedeutet, weil auch der Code zwei Schleifen ausführt) und ja, wenn ich Ihre ahnen Absicht richtig, mit dieser Logik ist klarer.

// Get directly the last one and add the clients name already in the 'session' 
// to this element. I suppose that the last one need to be informed of the 
// clients already in the list..... 
IClientCallBack client in listClientCallBacks.Last(); 
foreach (var n in listClientsName) 
    client.Enter(n); 

// Now for every client in the session EXCLUDING the last one 
// inform them of the new client that has joined your 'session' 
foreach (IClientCallBack client in listClientCallBacks.Take(listClientCallBacks.Length - 2)) 
    client.Enter(name); 
0

Das kann foreach Schleife sehr nützlich sein, aber es gibt Fälle, in denen die gute alte for Schleife zu ihrem Vorteil. Beispiele sind, wenn Sie nicht alle Elemente einer Sammlung verarbeiten oder wenn Sie den Index des aktuellen Elements benötigen.

Wenn ich dein Problem richtig verstanden habe, wollen Sie eine besondere Behandlung des letzten Elements:

// first until second last element 
int secondLastIndex = listClientCallBacks.Count - 2; 
for (int index = 0; index <= secondLastIndex; index++) 
{ 
    IClientCallBack client = listClientCallBacks[index]; 
    client.Enter(name); 
} 

// last element 
if (listClientCallBacks.Count > 0) 
{ 
    IClientCallBack lastClient = listClientCallBacks.Last(); 
    foreach (var n in listClientsName) 
    { 
     lastClient.Enter(n); 
    } 
    return; 
} 
Verwandte Themen