2017-11-20 3 views
-3

$ Ich konvertiere bereits die Daten, die ich erhalte. aber wenn ich versuche, es in eine switch-Anweisung zu setzen, dosent alles tun. Wie Sie sehen können, gibt es eine MessageBox.Show (rData), die die Daten zeigt, die ich erhalte, und es ist gut. nur auf dem Schalter. irgendein Vorschlag?Switch String-Anweisung funktioniert nicht?

string readData = null; 

    public void getMessage() 
    { 
     while (true) 
     { 
      serverStream = clientSocket.GetStream(); 
      int buffsize = 0; 
      byte[] inStream = new byte[10025]; 
      buffsize = clientSocket.ReceiveBufferSize; 
      serverStream.Read(inStream, 0, buffsize); 
      string rData = Encoding.ASCII.GetString(inStream); 
      readData = "" + rData; 
      //MessageBox.Show(rData); 

      switch (readData) 
      { 
       case ("Overview"): 
        MessageBox.Show("Start"); 
        break; 
       default: 
        break; 
      } 
     } 
    } 
+0

Was meinst du "es ist gut"? Was * genau * ist der Wert von 'readData'? –

+4

"Daten sind gut" ist nicht genug. Bitte geben Sie [MCVE] zusammen mit allen erforderlichen Daten inline ein. –

+1

Willkommen bei Stack Overflow! Da Sie ein neuer Benutzer sind, empfehle ich Ihnen, ["Wie Sie eine gute Frage stellen"] (https://stackoverflow.com/help/how-to-ask) zu lesen. Wenn Sie die Frage richtig stellen, erhalten Sie bessere Antworten und können anderen helfen, Ihre Frage zu verstehen, wenn sie ein ähnliches Problem haben. –

Antwort

2
byte[] inStream = new byte[10025]; 

Sie haben ein Byte-Array von mit Länge initialisiert 10025 Wenn Ihre eingehenden Daten nicht so lange ist, werden Sie Bündel \ 0 Zeichen (String-Terminator) am Ende bekommt, wenn man es in Zeichenfolge konvertieren.

Diese Zeichen werden nicht angezeigt, wenn Sie MessageBox.Show aufgerufen haben, da sie unsichtbare Zeichen sind.

so ist die Lösung, die die Anordnung der Größe der tatsächlichen Daten

OR .Replace("\0", ""); auf der Saite rufen zu initialisieren, bevor Sie es in die Switch-Anweisung füttern

+0

können Sie spezifischer wo sollte ich diese setzen? var.Replace? oder? – Jss

+0

@Jss readData = readData.Replace ("\ 0", ""); vor dem Wechsel – Steve

0

Das Problem ist, dass (ich nehme an) Sie verwenden C# 7.0 und Sie versuchen, Fall auf einer value tuple (die Sie versehentlich mit den Klammern um Ihre Zeichenfolge in der case-Anweisung einschränken) übereinstimmen. Entfernen Sie die Klammern in Ihrer Fallanweisung und versuchen Sie es erneut.

Verwandte Themen