将枚举值传递给动态对象调用的方法

时间:2010-04-30 08:22:04

标签: c# dynamic assemblies enums

我正在研究动态(在运行时)加载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 Analysis服务器。但如果我想打电话 这个方法带参数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中,但我不知道如何从程序集中获取动态枚举类型并将其传递给方法。有人知道解决方案吗?

非常感谢您的回答和帮助!

2 个答案:

答案 0 :(得分:0)

所有枚举都可以与其基本类型相同。在这种情况下,UpdateOptions的基本类型是int,因此您只需将值1传递给dynamicCube.Update,如下所示:

dynamicCube.Update(1)

您无需为动态枚举类型位烦恼。

答案 1 :(得分:0)

我找到了解决方案。代码是这样的:

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

它有效!

此致