Legen Sie Wert für DictionaryEntry
Bitte siehe mein code:
IDictionary dictionary = new Hashtable();
const string key = "key";
const string value = "value";
dictionary[key] = null; //set some trigger here
//set value
IDictionaryEnumerator dictionaryEnumerator = dictionary.GetEnumerator();
while (dictionaryEnumerator.MoveNext())
{
DictionaryEntry entry = dictionaryEnumerator.Entry;
if (entry.Value == null) //some business logic check; check for null value here
{
entry.Value = value; //set new value here
break;
}
}
Assert.AreEqual(value, dictionary[key]); //I have Fail here!
Frage ich mich :
- Was ist der richtige Ansatz für neue set-Wert für IDictionary, wenn
Ich weiß nicht, die entsprechende Taste. - Warum mein Beispiel nicht funktioniert? So wie ich das verstehe habe ich neue Wert
für DictionaryEntry von Wert (und der Wert hier ist ein Verweis), aber
es war nicht betroffen Quelle IDictionary. Warum?
gibt es einen Grund, Sie nicht verwenden ein generisches Wörterbuch? Dictionary<string,string>
ja, ich kann nicht mit Generika
ja, ich kann nicht mit Generika
InformationsquelleAutor Michael Z | 2012-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
DictionaryEntry nicht halten einen direkten Bezug zu den tatsächlichen Werten, die die interne datastructure ist ganz anders. Also, der Wert auf ein DictionaryEntry wird nichts tun, um die Werte tatsächlich in der Hashtable.
Um einen Wert festzulegen, müssen Sie den indexer. Sie auflisten können auf die Tasten sondern auf die Schlüssel-Wert-Paare. Dieser code ist äquivalent zu dem, was Sie versucht, mit DictionaryEntry:
Cast<object>
stattOfType<object>
. Auch erwähnenswert ist es, dassDictionaryEntry
ist ein struct. (Es ist ein evil veränderliche Struktur, zu Booten!) Beim aufzählen der Hashtable, bekommen Sie ein Reihenfolge dieser Strukturen, die Ihnen sagen, was in der Hashtable, aber kann nicht verwendet werden zum ändern der Hashtable. Dies hätte deutlicher, wenn die Struktur gemacht worden, unveränderlich, als mit seinem NachfolgerKeyValuePair<TKey, TValue>
.InformationsquelleAutor driis
Vorschläge
Dictionary<string,string>
So würde es wie wie dies
InformationsquelleAutor Simon