如何在c#中以哈希值的形式访问对象数组
本文关键字:访问 对象 数组 哈希值 | 更新日期: 2023-09-27 18:16:18
为什么下面会抛出编译错误[] cannot be applied to object.
(来自德语的粗略翻译)?
Hashtable entrys = new Hashtable();
string keyPath = "HKEY_CURRENT_USER''Software''Test";
string entryName = "testName";
entrys.Add(entryName, new object[]{256, RegistryValueKind.DWord}); // seems to work
foreach(DictionaryEntry entry in entrys)
{
Registry.SetValue(keyPath,
(string)entry.Key,
entry.Value[0], // error here
entry.Value[1]); // and here
}
我期望entry.Value
是一个对象数组,但显然编译器认为它只是一个对象。这里出了什么问题?
错误即将到来,因为DictionaryEntry
没有数组作为值的属性。下面是DictionaryEntry
的结构。你必须使用entry.Value
而不是entry.Value[0]
// Summary:
// Defines a dictionary key/value pair that can be set or retrieved.
[Serializable]
[ComVisible(true)]
public struct DictionaryEntry
{
public DictionaryEntry(object key, object value);
// Summary:
// Gets or sets the key in the key/value pair.
//
// Returns:
// The key in the key/value pair.
public object Key { get; set; }
//
// Summary:
// Gets or sets the value in the key/value pair.
//
// Returns:
// The value in the key/value pair.
public object Value { get; set; }
}
编辑
要使它工作,你必须强制转换它。使用以下代码
Registry.SetValue(keyPath,
(string)entry.Key,
((object[])(entry.Value))[0]);