是否可以控制Expando类在某些条件下不允许添加属性/成员?

时间:2019-03-13 16:08:13

标签: expandoobject expando kephas

据我所知,Kephas中的Expando类允许动态添加新成员。与.NET中的ExpandoObject不同,我注意到它不是密封的,因此我可以更改其行为,但是我真的不知道如何。

[编辑]

我的情况是在特定时间将expando设为只读。

1 个答案:

答案 0 :(得分:1)

尝试以下代码段:

public class ReadOnlyExpando : Expando
{
    private bool isReadOnly;

    public ReadOnlyExpando()
    {
    }

    public ReadOnlyExpando(IDictionary<string, object> dictionary)
        : base(dictionary)
    {
    }

    public void MakeReadOnly()
    {
        this.isReadOnly = true;
    }

    protected override bool TrySetValue(string key, object value)
    {
        if (this.isReadOnly)
        {
            throw new InvalidOperationException("This object is read only").
        }

        return base.TrySetValue(key, value);
    }
}

对于其他情况,您可能需要检查LazyExpando类,该类提供了一种基于函数解析动态值的方法,还可以处理循环引用异常。