2010-04-30 4 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 to 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, но я не знаю, как получить динамически перечислимую тип из сборки и передать его на метод. Кто-нибудь знает решение?

Большое спасибо за ответы и помощь!

ответ

0

Все перечисления можно обрабатывать так же, как и их базовый тип. В этом случае базовый тип UpdateOptions является INT, так что вы можете просто передать thevalue 1 в dynamicCube.Update так:

dynamicCube.Update(1) 

Вам не нужно возиться с динамическими битами типа ENUM.

+0

Я пробовал это, но не работает. Даже если я добавлю ссылку на сборку и попробую это получить ошибку: 'метод имеет некоторые недопустимые аргументы' –

0

Я нашел решение. Код выглядит так:

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

и это работает!

С уважением,