我正在尝试将某种类型转换为另一种泛型类型,但我找不到任何解决方案来解决如何在我的特定情况下完成此操作。简化的情况如下。请注意,这可能看起来很奇怪和人为,但这只是为了指出我的问题。实际应用更有意义...... :-)
// Raw data coming from some source
public class RawDataType { }
// Abstract base class for structured data representing this raw data
public abstract class AbstractListDataType { }
// Generates lists of structured data
public class ListGenerator<TListDataType> where TListDataType : AbstractListDataType
{
public List<TListDataType> GenerateList()
{
// Get the data from some mysterious place
RawDataType data = new RawDataType() { ... }
// Cast it to the required structured data type
return new List<TListDataType>() { data as TListDataType ??? }
}
}
然后在另一个程序集中,即在运行时加载的程序集中,这些原始数据有一些具体的表示。ListGenerator 本身绝对不了解这些类型。加载包含结构化数据类型的程序集后,将通过反射检查它以查看可以生成哪些类型的结构化数据。
// Two types of structured application data that can be created from the raw data
public class ListDataTypeA : AbstractListDataType
{
public static explicit operator ListDataTypeA(RawDataType data) { ... }
}
public class ListDataTypeB : AbstractListDataType
{
public static explicit operator ListDataTypeB(RawDataType data) { ... }
}
当然,
data as TListDataType
没有意义。如何实现从 RawDataType 到 ListDataTypeA 的动态转换,我知道有一个显式转换可用但仅在运行时可用?
编辑:
似乎以下工作:
(TListDataType)(dynamic)data
我觉得这非常丑陋。考虑到我在这里描述的情况,还有更好的方法吗?