我有以下两个班级。 ConvertToType<T>
类是一个现有的类并且工作正常,但是当它被使用时,每次都会创建一个实例(通过反射),因此我创建了一个包装类来保存所有实例,因为它们是为了提高效率而创建的。
public class TypeConverterHelper
{
private IList<ConvertToType<>> types;
}
internal class ConvertToType<T>
{
//snip
}
但是,正如您所看到的,我需要一个我的ConvertToType<T>
类的列表,但是我不能指定类型,因为这些类的整个点是在运行时之前类型是未知的。我已经对此问题进行了相当多的研究,但没有找到成功的解决方案。我知道我可以将泛型类型设置为一个对象,但在某些时候你可能会遇到un / boxing问题。添加限制为struct
的接口/抽象基类看起来是一个不错的选择,但不幸的是T
可能是一个字符串,可能是以后的其他自定义类,因此解决方案不会工作
那么有没有人有任何其他解决方案/建议?
答案 0 :(得分:3)
列表类型必须是非泛型的(因为无法预测泛型类型参数),因此object
会这样做,但使用常见的非泛型基类可能更好。拳击/拆箱不会进入讨论,因为ConvertToType
是参考类型。
当然,您必须先将列表中的值转换回ConvertToType<T>
才能使用它们;实现可能如下所示:
public class TypeConverterHelper
{
private IList<object> types;
public ConvertToType<T> GetConverter<T>()
{
return types.OfType<ConvertToType<T>>.FirstOrDefault();
}
}