.net 中是否有任何方法可以在运行时将属性字典绑定到实例,即,就好像基对象类具有如下属性:
public IDictionary Items { get; }
我想出了一个涉及静态字典和扩展方法的解决方案
void Main()
{
var x = new object();
x.Props().y = "hello";
}
static class ExpandoExtension {
static IDictionary<object, dynamic> props = new Dictionary<object, dynamic>();
public static dynamic Props(this object key)
{
dynamic o;
if (!props.TryGetValue(key, out o)){
o = new ExpandoObject();
props[key] = o;
}
return o;
}
}
但这会阻止对象进行 GC,因为 props 集合包含引用。事实上,这对于我的特定用例来说还可以,因为一旦我完成了我正在使用它们的特定事物,我就可以手动清除道具,但我想知道,是否有一些巧妙的方法来绑定ExpandoObject 到键同时允许垃圾收集?