2010-04-30 79 views
1

我正在處理動態(在運行時)加載dll的程序。
舉例:Microsoft.AnalysisServices.dll將枚舉值傳遞給被動態對象調用的方法

在此DLL中,我們有這個枚舉:

namespace Microsoft.AnalysisServices 
{ 
    [Flags] 
    public enum UpdateOptions 
    { 
     Default = 0, 
     ExpandFull = 1, 
     AlterDependents = 2, 
    } 
} 

,我們也有這個class Cube

namespace Microsoft.AnalysisServices 
{  
    public sealed class Cube : ... 
    { 
     public Cube(string name); 
     public Cube(string name, string id); 
.. 
.. 
.. 
    } 
} 

我動態加載這個DLL和創建對象Cube。比我打電話的方法Cube.Update()。此方法將Cube部署到SQL分析服務器。但是,如果我想調用 此方法與參數Cube.Update(UpdateOptions.ExpandFull)我得到錯誤,因爲方法沒有得到適當的參數。

我已經試過了,但不工作:

dynamic updateOptions = AssemblyLoader.LoadStaticAssembly("Microsoft.AnalysisServices", "Microsoft.AnalysisServices.UpdateOptions");//my class for loading assembly 
Array s = Enum.GetNames(updateOptions); 
dynamic myEnumValue = s.GetValue(1);//1 = ExpandFull 
dynamicCube.Update(myEnumValue);// == Cube.Update(UpdateOptions.ExpandFull) 

我知道錯誤是在參數myEnumValue,但我不知道如何從裝配得到動態枚舉類型,並把它傳遞給方法。有人知道解決方案嗎?

非常感謝您的回答和幫助!

回答

0

所有枚舉可以被視爲與它們的基類型相同。在這種情況下,UpdateOptions的基本類型爲int,所以你可以簡單地傳遞thevalue 1到dynamicCube.Update這樣的:

dynamicCube.Update(1) 

你並不需要用動態枚舉類型位打擾。

+0

我試過這個,但是不行。即使我添加引用到程序集,並嘗試這我得到錯誤: '方法有一些無效的參數' – 2010-04-30 08:48:56

0

我找到了解決方案。該代碼是這樣的:

dynamic assembly = AssemblyLoader.LoadStaticAssembly("Microsoft.AnalysisServices", Microsoft.AnalysisServices.UpdateOptions");
dynamic expandFull = (Enum)Enum.Parse(assembly, "ExpandFull", true);
dynamicCub.Update(expandFull);

和它的作品!

Regards,