我们有一个遗留类,它使用索引器来允许人们添加任意的键值对:
legacyInstance["myKey"] = value;遗憾的是,我们不能查看或修改这个类的代码。我们只能通过它的各种属性来访问它。
我们需要做的是以一种智能的方式克隆这个对象。当然,普通属性很容易克隆:
myClone.blargle = legacyInstance.blargle;但是,我们如何发现某人可能添加到特定对象实例中的所有键,以便正确克隆它们?理想情况是这样的:
string[] keys = legacyInstance.<#magic!#>;
foreach (string key in keys)
{
myClone[key] = legacyInstance[key];
}虽然我怀疑魔法可能涉及到一些反思,但事实证明,由于我是一个反思的暴徒,所以很难做到这一点。
发布于 2011-09-20 05:01:50
获取ILSpy并进入源代码。如果您的集合不公开成员以迭代键(就像Dictionary公开Keys一样),那么这是您惟一的选择。顺便问一下,也许你的收藏是IEnumerable?实际上,对于一个集合来说,不为提供任何迭代工具是很奇怪的。它不是叫YouCanOnlyUseIndexCollection吗?
https://stackoverflow.com/questions/7477225
复制相似问题