是否可以控制 Expando class 在特定条件下不允许添加 properties/members?

Is there a possibility to control the Expando class to not allow adding properties/members under certain conditions?

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

[已编辑]

我的方案是在特定时间将 expando 设置为只读。

试试这个片段:

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 class,它提供了一种基于函数解析动态值的方法,还可以处理循环引用异常。