1

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

[编辑]

我的方案是在某个时间使 expando 只读。

4

1 回答 1

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

于 2019-03-14T18:51:33.363 回答