2010-11-19 79 views
0

我使用反射来动态指定类名,当我做像这样使用FileHelpers文件导入...升级FileHelpers库,现在我的代码已经过时

Assembly assembly = Assembly.GetExecutingAssembly(); 
AssemblyName assemblyName = assembly.GetName(); 
Type t = assembly.GetType(assemblyName.Name + ".FileDefinitions." + className); 
FileHelperEngine engine = new FileHelperEngine(t); 

获取最新版本的库后,我在做上面现在被认为“过时”

的实施已更改为仿制药以这种方式

FileHelperEngine<myImportDefinitionClass> = new 
           FileHelperEngine<myImportDefinitionClass>(); 

,但我不知道如何指定myImportDefintionClass在运行时动态使用原始反射代码不起作用。

UPDATE:试图保罗的代码后,我现在需要能够做访问FileHelpers类如中的方法或什么(这部分不编译)

fileHelperEngine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue; 

importData = fileHelperEngine.ReadFileAsDT(filepath); 

但我并不清楚实际发生的事情。更好地理解泛型概念的任何链接也将被赞赏。

回答

1

Breadtruck

我COMMITED的变化与昨天的[Obsolote]属性实际上是检查下一个版本的lib的一些例子,但现在被删除。

你可以做一个SVN更新并重新编译,以避免该警告,遗憾的问题:(

马科斯

+0

我仍然能够使用我的旧代码,它只是理解和修复它,在它不工作之前。我认为我可以继续从团队中取得文物?伟大的工作方式,帮助我做我需要的东西:) – Breadtruck 2010-11-19 17:41:22

+0

你不需要改变你的代码,因为是完美的。 我强烈推荐你下载稳定的分支,而不是树干,因为你可以捕捉到一个bug,我们在工作中使用稳定的分支没有问题。 比如今天我们用.net 2.0和4.0的版本来完成构建以避免问题,我们也在考虑为AnyCpu/x86/x64提供构建,因为Visual Studio有可能存在问题 – MarcosMeli 2010-11-20 04:35:37

2
Assembly assembly = Assembly.GetExecutingAssembly(); 
AssemblyName assemblyName = assembly.GetName(); 
Type emptyGenericType = typeof(FileHelperEngine<>); 
Type genericTypeArgument = assembly.GetType(assemblyName.Name + ".FileDefinitions." + className); 
Type completeGenericType = emptyGenericType.MakeGenericType(genericTypeArgument); 
var fileHelperEngine = Activator.CreateInstance(completeGenericType); 

不幸的是,不可能将结果对象直接转换为泛型类型,c#不会实现鸭子打字。

我想你有两个选择,使用接口或基类,并强制转换,fileHelperEngine没有实现任何接口,也没有基类有任何有用的方法,所以这是没有用的。如果许可证允许,您可以更改代码并实施一个代码。

另一种选择是测试类型,这是哈克,但确定的,如果这种可能性的单子是小,例如:

if (fileHelperEngine is FileHelperEngine<string>) 
    fileHelperEngine = fileHelperEngine as FileHelperEngine<string>; 

+0

所以在这一点上,我已经把你的代码,但我怎么会那么访问方法在FileHelperClass? – Breadtruck 2010-11-19 03:59:36

+0

更新答案。 – 2010-11-19 04:28:29

+0

我对语句“FileHelperEngine没有实现任何接口,它的基类没有任何有用的方法”感到困惑?从文档.....公共类FileHelperEngine :EventEngineBase , \t IFileHelperEngine 其中T:类 .... IFileHelperEngine是不是意味着它有一个接口? – Breadtruck 2010-11-19 05:21:24

相关问题