【发布时间】:2015-04-29 05:22:22
【问题描述】:
我知道如何将 ConcurrentDictionary 转换为 Dictionary。
而且我知道我可以使用反射来确定对象是否包含 ConcurrentDictionary。
但是当我通过反射确定一个对象确实有一个 ConcurrentDictionary 之后,我如何在运行时将它转换为 Dictionary 呢?或者我可以做到吗?它会改变类的定义,对吧?
编辑:我应该说得更清楚。我举个例子:
[Serializable]
[DataContract]
public class CacheItem
{
[DataMember]
private ConcurrentDictionary<string, CacheItemEntity> _cacheItemDictionary = new ConcurrentDictionary<string, CacheItemEntity>();
......
}
当我序列化此类的实例时,AVRO 无法序列化 ConcurrentDictionary。所以我想知道我是否可以在运行时将 ConcurrentDictionary 转换为普通字典。这肯定会改变类的定义。我只是想知道是否可以这样做。
【问题讨论】:
-
想要转换类型的动机是什么?
-
@jdphenix,能够通过 microsoft AVRO 库序列化包含 ConcurrentDictionary 的对象。
-
var newDictionary = yourConcurrentDictionary.ToDictionary(kvp =>vp.Key, kvp => kvp.Value); -
var dictionary = new Dictionary<TKey, TValue>(concurrentDictionary);? -
你的问题很混乱,因为你说你知道怎么做A,你知道怎么做B,但是你想知道怎么做B然后A。问题是实际上由于使用反射,您在编译时不知道类型参数? “更改类的定义”是什么意思-您是否要更改字段本身的类型?如果你能把它说得更清楚,那真的很有帮助......
标签: c#