【发布时间】:2016-02-23 03:00:31
【问题描述】:
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();
}
}
我收到此错误:
无法将类型“object”隐式转换为“string”。显式 存在转换(您是否缺少演员表?)
【问题讨论】:
-
您正在定义一个字典,其中键是字符串,值是对象(因此,
Dictionary<string, object>为什么您希望隐式转换string mystr = val.Value;会起作用? -
使用
Dictionary<>的美妙之处在于,您可以直接询问相关值,而不是遍历键来查找您想要的内容。myVal["key1"]如果您确定密钥存在,或者myVal.TryGetValue("key1", out myStr)如果您不存在。 -
您应该学习阅读错误消息并立即知道该怎么做,例如..如果没有正确转换或将其转换为字符串,您将无法将整数存储为字符串..在您的如果没有正确的转换,字典
永远不会适合外行人的字符串。 -
使用
var mystr = val.Value;隐式输入将解决这个确切代码的直接问题,只是因为Console.Write()将在您的对象上使用.ToString(),但其他使用Dictionary<string, string>的建议会很远如果您确定您的值是字符串,那就更好了。使用强制转换作为类型安全的解决方法会让你遇到这些问题。 -
在这里,为了更好地理解,我对其进行了简化,我的对象部分因类型而异。
标签: c# asp.net .net c#-4.0 c#-3.0