【发布时间】:2014-11-02 00:55:58
【问题描述】:
我编写了一个具有以下类型签名的泛型类型转换器 -
type AlgebraicConverter<'t> () =
inherit TypeConverter ()
...
我希望将此转换器应用于现有的泛型类型,例如 Option。另外,我希望一般这样做,以便 Option 将自动使用 AlgebraicConverter> 作为其转换器。
因为我无法控制现有类型的定义,所以我无法通过以下声明以通常的方式指定自定义类型转换器 -
type [<TypeConverter (typeof<AlgebraicConverter<Option<'t>>>)>] Option<'t> = ...
到目前为止,我只能通过使用 TypeDescriptor.AddAttributes 方法将我的通用转换器应用于现有类型的特定类型实例化 -
TypeDescriptor.AddAttributes (typeof<Option<int>>, TypeConverterAttribute typeof<AlgebraicConverter<Option<int>>>)
但是,这并不令人满意,原因有两个 -
1) 我无法提前知道我的用户可能需要哪些不同类型的实例化,并且
2) 无论如何,尝试将此转换器应用于所有可能的实例化是不切实际的。
我可以采用什么技术泛型将我的泛型类型转换器应用于现有的泛型类型?希望有一种令人满意的优雅方法来实现这一目标。
C#'rs,也请随意回答这个问题;只有此问题中使用的示例类型特定于 F#。
【问题讨论】:
标签: .net generics reflection f#