【发布时间】:2011-11-11 09:11:46
【问题描述】:
我要疯了。这可能是因为我错过了一些规则,但如果是这样,请告诉我。
我正在尝试创建一个Dictionary,其中一个字符串作为键,一个匿名对象作为值。或者,实际上我不只是在尝试,我正在这样做。
但是当我想改变对象中的特定参数时,它就出错了。
我这样声明字典:
var areas = new Dictionary<string, object>
{
{"Key1", new {name = "Name1", today = 0, all = 0}},
{"Key2", new {name = "Name2", today = 0, all = 0}},
...
}
然后我假设我可以做到这一点:
foreach (var area in areas.Keys.ToArray())
{
var areaname = areas[area].name;
}
但 Visual Studio 不同意,拒绝编译。不过,如果我写这篇文章,一切都会如我所想 - 但这并不能真正帮助我,只会让我更加沮丧。
var areaname = new
{
name = "Nametest", today = 0, all = 0
};
var testname = areaname.name;
我做错了什么?为什么它对我不起作用?是不是根本不可能做到这一点?
感谢您的所有回答,他们肯定让事情变得更清楚了! 我想我可能出于沮丧而将类型 object 与 C# 中的对象(即类)的概念混淆了。我会重新思考整个设计行业,可能会做一些完全不同的事情,而不是使用邪恶或肮脏的解决方案。虽然很有趣,但我认为我与 C# 的关系还没有发展到那么远!
【问题讨论】:
-
您是否尝试使用“动态”而不是“对象”作为值类型?
-
编译器无法解析您从字典中检索到的对象(值)的 Name 属性。对于 var 情况,编译器会放入真正的动态类型来代替 var,以帮助编译器。在这种情况下为什么需要匿名类型?当您知道所有值都应该存在哪些属性时,即它不是未知的。
标签: c# object dictionary