未知类型的通用对象列表

时间:2014-01-27 10:50:36

标签: c# generics

我有以下两个班级。 ConvertToType<T>类是一个现有的类并且工作正常,但是当它被使用时,每次都会创建一个实例(通过反射),因此我创建了一个包装类来保存所有实例,因为它们是为了提高效率而创建的。

public class TypeConverterHelper
{
    private IList<ConvertToType<>> types;
}

internal class ConvertToType<T>
{
    //snip
}

但是,正如您所看到的,我需要一个我的ConvertToType<T>类的列表,但是我不能指定类型,因为这些类的整个点是在运行时之前类型是未知的。我已经对此问题进行了相当多的研究,但没有找到成功的解决方案。我知道我可以将泛型类型设置为一个对象,但在某些时候你可能会遇到un / boxing问题。添加限制为struct的接口/抽象基类看起来是一个不错的选择,但不幸的是T可能是一个字符串,可能是以后的其他自定义类,因此解决方案不会工作

那么有没有人有任何其他解决方案/建议?

1 个答案:

答案 0 :(得分:3)

列表类型必须是非泛型的(因为无法预测泛型类型参数),因此object会这样做,但使用常见的非泛型基类可能更好。拳击/拆箱不会进入讨论,因为ConvertToType是参考类型。

当然,您必须先将列表中的值转换回ConvertToType<T>才能使用它们;实现可能如下所示:

public class TypeConverterHelper
{
    private IList<object> types;

    public ConvertToType<T> GetConverter<T>()
    {
        return types.OfType<ConvertToType<T>>.FirstOrDefault();
    }
}