在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