2012-07-12 94 views
1

我想在访问动态对象之前创建属性。 为e.g比方说,有一个对象X.不存在的财产“SomeProperty”是在X访问如下,如何在C#中访问动态对象时添加属性

var testProperty = X.SomeProperty; 

我想创建X.SomeProperty,而它被访问。 它可能在C#动态?

+0

懒惰评价? – 2012-07-12 09:45:09

+0

如果SomeProperty尚未设置但被访问,您希望它返回什么?一个空的物体?空值? 41? – Ibasa 2012-07-12 10:11:00

回答

3
public class X : DynamicObject 
{ 
    Dictionary<string, object> dictionary = new Dictionary<string, object>(); 

    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; 
    } 
} 


dynamic obj = new X(); 
obj.SomeProperty = "Test"; 
Console.WriteLine(obj.SomeProperty); 
+0

当您尝试为属性赋值(例如'obj.SomeProperty = 5')时,您将得到一个'RuntimeBinderException'。 – 2012-07-12 09:57:59

+0

@NikolaAnusev你的权利,我刚刚添加了完整的例子,我只是提供一个快速和肮脏的例子。谢谢你指出 – HatSoft 2012-07-12 10:00:23

相关问题