尝试将 Dictionary<string, object> 分配给字符串变量时出现错误

I get an error while trying to assign Dictionary<string, object> to a string variable

    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();
        }
    }

我收到这个错误:

Cannot implicitly convert type 'object' to 'string'. An explicit conversion exists (are you missing a cast?)

两个选择:

要么使用 Dictionary<string, string>

将您从 Dictionary<string, object> 中得到的 object 个实例投射到 string

string mystr = (string)(val.Value);

为什么会出现这样的错误:

在使用 foreach (var val in myVal) 迭代 Collection(Dictionary<string, object>) 时,每个 val 将是一个 KeyValuePair<string, object>,其中 val.Key 表示键,val.Value表示key对应的Value。

在您的情况下,值的类型为 object,因为您的集合的类型为 <string, object>。通过使用 string mystr = val.Value; ,您将一个对象分配给一个字符串变量。根据规则,不允许进行此分配。

解法:

  • 将对象转换为字符串,如下所示:

    string mystr = (string)(val.Value);
    
  • 填充Dictionary的语句myVal.Add("key2", "value2");表明key和value都是字符串类型所以你可以重新定义Dictionary为

    Dictionary<string, string> myVal = new Dictionary<string, string>();
    

不好意思,我发现有嵌套的字典,其中另一个 List 操作导致了这个问题。我刚刚添加了一些 foreach 循环以进入最终字典并深入研究完美运行的列表。

我最后的作品如下:

Messages.Add(Path.GetFileName(fileName), ((List<string>)(runResult.Single(m => m.Key == "Messages")).Value)[0]);