在DynamicObject的文档中,有一个DynamicDictionary
的示例,它允许您使用字典,就好像它是具有属性的类。如何编写支持对象初始化程序的自定义DynamicObject类
这里是类(为简便起见稍作修改):
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
@Magnus在技术上可以与动态对象一起使用,但只能以非动态方式使用。所以如果你的动态对象具有非动态的'Id'属性,你可以使用它的对象初始值设定项。但这无助于回答这个问题。 – svick
确实,对于“正常”属性,ti'll可以正常工作。我猜你colud添加一个构造函数,它接受'IEnumerable>'并使用它来创建Dictionary。 –
Magnus