尝试将字典<字符串,对象>分配给字符串变量时出现错误

本文关键字:字符串 变量 错误 分配 对象 字典 | 更新日期: 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]);