【发布时间】:2012-01-14 13:21:03
【问题描述】:
在DynamicObject 的文档中,有一个DynamicDictionary 的示例,它允许您像使用具有属性的类一样使用字典。
这是类(为简洁起见稍作修改):
public class DynamicDictionary : DynamicObject
{
Dictionary<string, object> _dictionary = new Dictionary<string, object>();
public int Count
{
get { return _dictionary.Count; }
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
string name = binder.Name.ToLower();
return _dictionary.TryGetValue(name, out result);
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
_dictionary[binder.Name.ToLower()] = value;
return true;
}
}
我想做的是修改类,以便我可以执行以下操作:
public class Test
{
public Test()
{
var result = Enumerable.Range(1, 5).Select(i => new DynamicDictionary
{
Id = i,
Foo = "Foo",
Bar = 2
});
}
}
问题
- 这可能吗?
- 如果是,怎么做?
【问题讨论】:
-
对象初始化器不适用于动态对象
-
@Magnus,从技术上讲,它可以处理动态对象,但只能以非动态方式。因此,如果您的动态对象具有非动态
Id属性,则可以使用对象初始化器。但这无助于回答问题。 -
是的,对于“正常”属性,它可以正常工作。我猜你应该添加一个接受
IEnumerable<KeyValuePari<string, object>>的构造函数并使用它来创建字典。
标签: c# linq dynamic object-initializers