从 Type 变量创建 FileHelperEngine
Create FileHelperEngine from Type variable
我正在尝试使用通用类型创建 FileHelperEngine<> 的实例。例如,这适用于 List
public static IList CreateList(Type type)
{
var genericListType = typeof(List<>).MakeGenericType(type);
return (IList)Activator.CreateInstance(genericListType);
}
是否可以为 FileHelperEngine<> 做类似的事情?
我试过了
public static FileHelperEngine CreateFileHelperEngine(Type type)
{
var genericFileHelperEngineType = typeof (FileHelperEngine<>).MakeGenericType(type);
return (FileHelperEngine)Activator.CreateInstance(genericFileHelperEngineType);
}
并得到这个错误
无法将类型 'FileHelpers.FileHelperEngine`1[NachaParser.Model.EntryDetail.PpdEntryModel]' 的对象转换为类型 'FileHelpers.FileHelperEngine'。
这是行不通的,因为您正试图从通用引擎转到标准引擎。通用引擎不继承标准引擎,所以你不能直接转换。
以下代码应该适合您:
public static FileHelperEngine<T> CreateFileHelperEngine<T>() where T : class
{
var genericFileHelperEngineType = typeof(FileHelperEngine<>).MakeGenericType(typeof(T));
return (FileHelperEngine<T>)Activator.CreateInstance(genericFileHelperEngineType);
}
问题是您需要将 T 的类型作为传递的泛型参数而不是类型变量。不幸的是,通用引擎基于 EngineBase<T>
并以 IFileHelperEngine<T>
作为其实现的接口,因此您永远无法将 FileHelperEngine<T>
转换为 FileHelperEngine
。
您唯一的选择是使用:
public static FileHelperEngine CreateFileHelperEngine(Type type)
{
if (!type.IsClass)
throw new InvalidCastException("Cannot use '" + type.FullName + "' as it is not a class");
return new FileHelperEngine(type);
}
我正在尝试使用通用类型创建 FileHelperEngine<> 的实例。例如,这适用于 List
public static IList CreateList(Type type)
{
var genericListType = typeof(List<>).MakeGenericType(type);
return (IList)Activator.CreateInstance(genericListType);
}
是否可以为 FileHelperEngine<> 做类似的事情?
我试过了
public static FileHelperEngine CreateFileHelperEngine(Type type)
{
var genericFileHelperEngineType = typeof (FileHelperEngine<>).MakeGenericType(type);
return (FileHelperEngine)Activator.CreateInstance(genericFileHelperEngineType);
}
并得到这个错误
无法将类型 'FileHelpers.FileHelperEngine`1[NachaParser.Model.EntryDetail.PpdEntryModel]' 的对象转换为类型 'FileHelpers.FileHelperEngine'。
这是行不通的,因为您正试图从通用引擎转到标准引擎。通用引擎不继承标准引擎,所以你不能直接转换。
以下代码应该适合您:
public static FileHelperEngine<T> CreateFileHelperEngine<T>() where T : class
{
var genericFileHelperEngineType = typeof(FileHelperEngine<>).MakeGenericType(typeof(T));
return (FileHelperEngine<T>)Activator.CreateInstance(genericFileHelperEngineType);
}
问题是您需要将 T 的类型作为传递的泛型参数而不是类型变量。不幸的是,通用引擎基于 EngineBase<T>
并以 IFileHelperEngine<T>
作为其实现的接口,因此您永远无法将 FileHelperEngine<T>
转换为 FileHelperEngine
。
您唯一的选择是使用:
public static FileHelperEngine CreateFileHelperEngine(Type type)
{
if (!type.IsClass)
throw new InvalidCastException("Cannot use '" + type.FullName + "' as it is not a class");
return new FileHelperEngine(type);
}