2016-08-02 22 views
-1

Ich bin ein Noobie zu C# und verstehe nicht, warum ContainsKey() mit den Werten bid_amount und bid_amount nicht wahr zurückgibt.Dictionary ContainsKey() Vergleicht keine String-Werte

Ich habe eine lange Zeichenfolge ("key=value, key=value..."), die auf , aufgeteilt und dann = in ein Wörterbuch erstellt wird. Aber wenn ich im dict bid_amount nach einem bekannten Schlüssel suche, wird immer false zurückgegeben.

Gibt es eine Möglichkeit, Werte mit ContainsKey() zu vergleichen? Was genau vermisse ich?

string[] responseStringSplit = responseString.Split (new []{ ',' }); 
Dictionary<string,string> responseDict = new Dictionary<string, string>(); 

foreach (string word in responseStringSplit) 
{ 
    string[] splitString = word.Split (new[]{ ':' }); 
    if (splitString.Length > 1) 
    { 
     responseDict.Add(splitString [0],splitString [1]); 
    } 
    else 
    { 
     Debug.Log ("CouldNotSplit:" + word); 
    } 
} 

foreach (KeyValuePair<string, string> entry in responseDict) 
{ 
    Debug.Log (entry.Key + "=" + entry.Value); 
    if (responseDict.ContainsKey ("bid_amount")) 
    { 
     Debug.Log ("found bid amount"); 
    } 
} 
+2

Können Sie uns Ihren Eingabe-String zeigen? –

+1

Sind Sie sicher, dass es eine solche Zeichenfolge gibt? Ich meine, keine Räume um ihn herum? Vielleicht könnten Sie ein Trim hinzufügen, bevor Sie das Schlüssel/Wert-Paar um _spitstring [0], [1] _ – Steve

+0

hinzufügen Works für mich. Überprüfen Sie Ihre Eingabe. Sehen Sie hier für ein funktionierendes Beispiel Ihres Codes mit einer gültigen Eingabe: https://dotnetfiddle.net/SxOJ8M –

Antwort

0

auf Ihrer Eingabe Basierend, haben Sie einen Raum zwischen Ihren , und Ihrem key bekommen. Versuchen Sie, .Trim() unter splitString[0] und splitString[1] aufzurufen, bevor Sie es Ihrem Wörterbuch hinzufügen.

responseDict.Add(splitString[0].Trim(), splitString[1].Trim()); 
+0

Ja, da war ein Leerzeichen und .Trim() hat es behoben. Vielen Dank. – lawrencehagman

0

Wenn Sie genau auf den Code und Eingabe aussehen haben Sie 2 Probleme:

  1. Sie erste Spaltung durch „“ während Sie Ihre Eingabe-Code wird ‚sometext, someTextAfterSpace‘ - also von“geteilt, ".
  2. Dann verteilen Sie mit ":", während Sie Ihre Eingabe Code mit ist "="

-Code sollte sein:

//split by ", " (plus the space) to avoid that problem (or use trim) 
string[] responseStringSplit = responseString.Split (new []{ ", " }); 

//split by "=" instead of current ":" (Or change input string from having '=' to ':') 
string[] splitString = word.Split (new[]{ '=' }); 

Neben dem Ändern, dass das Hinzufügen Trim() s und ToLower() für die Schlüssel von natürlich willkommen, um Probleme mit Leerzeichen und Groß-/Kleinschreibung zu vermeiden