Holen Sie sich Schlüssel-Wert - Dictionary<string, List<string>>
Bin ich mit Mühe den Schlüssel, indem Sie einen Wert. Was ist die beste Art, wie ich diese erreichen können?
var st1= new List<string> { "NY", "CT", "ME" };
var st2= new List<string> { "KY", "TN", "SC" };
var st3= new List<string> { "TX", "OK", "MO" };
var statesToEmailDictionary = new Dictionary<string, List<string>>();
statesToEmailDictionary.Add("[email protected]", st1);
statesToEmailDictionary.Add("[email protected]", st2);
statesToEmailDictionary.Add("[email protected]", st3);
var emailAdd = statesToEmailDictionary.FirstOrDefault(x => x.Value.Where(y => y.Contains(state))).Key;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Rückgabewert von
FirstOrDefault
wird einKeyValuePair<string, List<string>>
, so, den Schlüssel zu bekommen, verwenden Sie einfach dieKey
Eigenschaft. Wie diese:Alternativ, hier ist der Gegenwert in der Abfrage-syntax:
FirstOrDefault(...).Key
gefährlich, da es zu unerwartetem Verhalten, wenn "OrDefault" Auftritt hier?null
, aber für value-Typen, es wird eine neue Instanz dieses Typs. DaKeyValuePair<TKey, TValue>
ist ein Wert-Typ (d.h. einstruct
), die 'OrDefault' Fall wird nicht in ein null-Verweis-Ausnahme. DaTKey
hier iststring
, die.Key
dieses neue Instanznull
.Ich denke, Sie wollen:
Aber wenn Sie auf der Suche nach Leistung, würde ich vorschlagen, Umkehr Ihr Wörterbuch und erstellen ein Wörterbuch der
<state, email>
zu tun, was du bist suchen für.NullReferenceException
?Was jeder in diesem thread nicht zu erwähnen, ist, dass die
FirstOrDefault
Methode ist nur verfügbar, durch Linq:Einfache Linq, genau das zu tun
Natürlich, wenn es doppelte Werte, diese wird wieder mehr als eine
KeyValuePair
KeyValuePair<T, U>
ist ein struct, alsotemp
wird nie null sein.