2010-11-19 24 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

相關問題