Передайте значение перечисления методу, который вызывается динамическим объектом - PullRequest
1 голос
/ 30 апреля 2010

Я работаю над программой, которая динамически (во время выполнения) загружает библиотеки 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, но я не знаю, как получить динамический тип enum из сборки и передать его методу. Кто-нибудь знает решение?

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

Ответы [ 2 ]

0 голосов
/ 05 мая 2010

Я нашел решение. Код такой:

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

и все работает!

С уважением,

0 голосов
/ 30 апреля 2010

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

dynamicCube.Update(1)

Вам не нужно беспокоиться о динамических битах типа enum.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...