尝试将字典<字符串,对象>分配给字符串变量时出现错误
本文关键字:字符串 变量 错误 分配 对象 字典 | 更新日期: 2023-09-27 18:35:43
Dictionary<string, object> myVal = new Dictionary<string, object>();
myVal.Add("key1", "value1");
myVal.Add("key2", "value2");
foreach (var val in myVal)
{
if (val.Key == "key1")
{
string mystr = val.Value;
Console.Write(val.Value);
Console.ReadLine();
}
}
我收到此错误:
不能将类型"对象"隐式转换为"字符串"。一个明确的 转换存在(您是否缺少演员表?
为什么你得到这样的错误:
在使用foreach (var val in myVal)
迭代 Collection(Dictionary<string, object>
) 时,每个val
将是一个KeyValuePair<string, object>
,其中 val.Key
表示键,val.Value
表示与键对应的值。
在您的情况下,该值将为 object
类型,因为您的集合属于 <string, object>
类型。通过使用string mystr = val.Value;
您将对象分配给字符串变量。根据规则,不允许进行此分配。
溶液:
-
将对象强制转换为如下所示的字符串:
string mystr = (string)(val.Value);
-
填充
Dictionary
的语句myVal.Add("key2", "value2");
指示键和值都是字符串类型,因此您可以将字典重新定义为Dictionary<string, string> myVal = new Dictionary<string, string>();
两个选择:
要么使用Dictionary<string, string>
或
将您从Dictionary<string, object>
中获取的object
实例转换为string
string mystr = (string)(val.Value);
我的坏,我发现有嵌套的字典,并且在其中运行另一个列表导致了问题。我只是添加了一些foreach循环以进入最终字典并深入研究完美运行的列表。
我的最后一篇文章如下所示:
Messages.Add(Path.GetFileName(fileName), ((List<string>)(runResult.Single(m => m.Key == "Messages")).Value)[0]);