gpt4 book ai didi

.net - 输入字典?

转载 作者:行者123 更新时间:2023-12-04 21:00:00 26 4
gpt4 key购买 nike

有没有人听说过使用类型作为键并支持继承的“类型字典”?

在我的应用程序中,我想要一个从类型到函数的字典,有点像这样:

Dictionary<Type, Func<object, object>> Transformers;

这个想法是,它将用于根据对象的类型以某种方式转换对象:
// Transform an object 'obj'
object result = Transformers[obj.GetType()](obj)

普通字典的缺点是类型必须完全匹配。因此,如果我为 IList 编写了一个转换器,那么将它放在 Transformers 字典中是没有用的,因为没有对象具有 IList 类型(只有 T[]、List 等)。 ,如果 obj 是 List ,则 IList 的转换器将无法通过在普通字典中的查找找到。

假设没有 TypeDictionary 这样的东西,如果不太难,我可能会考虑写一个。任何想法如何实现?

最佳答案

您应该能够使用带有 custom comparer 的字典。使用 Type.IsAssignableFrom比较 key 。

更新:正如 Qwertie 指出的那样,这是行不通的,因为您无法实现基于类型、其接口(interface)和祖先类的可重复哈希码计算。 His answer通过重复对类型、接口(interface)和祖先类进行哈希表查找,直到找到匹配项,提供了一种可能的解决方案。

该解决方案的唯一问题是,当有多个匹配项时,您无法指定要采用哪个匹配项。如果您需要这种灵 active 和控制力,我建​​议您考虑 chain-of-responsibility设计模式。每个转换器都可以是链中的一个环节,它负责确定是否可以将其应用于对象。如果不是,它将请求传递到下一个链接。链中转换器的顺序决定了优先级。您失去了哈希表的速度,但由于多次查找,您无论如何都会失去一些速度。

关于.net - 输入字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1848627/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com