据我所知,kepass中的Expando
类允许即时添加新成员。与.net中的ExpandoObject
不同,我注意到它没有密封,所以我可以改变其行为,但我真的不知道如何。
[编辑]
我的场景是在一定时间进行Expando ReadOnly。
尝试此片段:
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
类,该类提供了一种基于功能解决动态值的方法,还处理循环引用异常。