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

时间:2016-02-23 03:00:31

标签: c# asp.net .net c#-4.0 c#-3.0

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

我收到此错误:

  

无法隐式转换类型&#39;对象&#39;到&#39;字符串&#39;。一个明确的   存在转换(你错过了演员吗?)

3 个答案:

答案 0 :(得分:3)

两种选择:

使用Dictionary<string, string>

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

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

答案 1 :(得分:3)

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

使用Dictionary<string, object>使用foreach (var val in myVal)迭代集合(val)时KeyValuePair<string, object>将是val.Key,其中val.Value表示密钥,object表示与键对应的值。

在您的情况下,该值的类型为<string, object>,因为您的集合属于string mystr = val.Value;类型。通过使用string mystr = (string)(val.Value); ,您将对象分配给字符串变量。根据规则,不允许这项任务。

<强>解决方案:

  • 将对象强制转换为如下字符串:

    myVal.Add("key2", "value2");
  • 填充Dictionary的语句Dictionary<string, string> myVal = new Dictionary<string, string>(); 表示键和值都是字符串类型,因此您可以将字典重新定义为

    @RouteConfig([
        {path: '/login', name: 'Login', component: LoginComponent, useAsDefault: true},
        {path: '/register', name: 'Register', component: RegisterComponent}
    ])
    

答案 2 :(得分:0)

我的不好,我发现有嵌套的词典,其中另一个List操作导致了这个问题。我刚刚添加了一些foreach循环以进入最后的字典并深入到List中,它完美地工作。

我的最后一篇文章如下所示:

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