设置DictionaryEntry的值
本文关键字:的值 DictionaryEntry 设置 | 更新日期: 2023-09-27 18:29:15
请参阅我的代码:
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!
我想知道:
当我不知道对应的钥匙。
为什么我的例子不起作用?据我所知,我已经树立了新的价值观对于DictionaryEntry按值(此处的值为参考),但是它在来源IDictionary中没有受到影响。为什么?
DictionaryEntry没有直接引用实际值,内部数据结构完全不同。因此,在DictionaryEntry上设置值对哈希表中的实际值没有任何作用。
若要设置值,必须使用索引器。您可以在键上枚举,而不是在键值对上枚举。此代码相当于您使用DictionaryEntry尝试的代码:
IDictionary dictionary = new Hashtable();
const string key = "key";
const string value = "value";
dictionary[key] = null; // set some trigger here
foreach(var k in dictionary.Keys.OfType<object>().ToArray())
{
if(dictionary[k] == null)
dictionary[k] = value;
}
建议
- 移动到
Dictionary<string,string>
- 不要循环浏览项目。直接设置即可
所以它想要这个
var dictionary = new Dictionary<string,string>();
var key = "key";
var value = "value";
dictionary[key] = null; // set some trigger here
// set value
dictionary[key] = value;
Assert.AreEqual(value, dictionary[key]);