Как получить значение enum из сборки, используя позднюю привязку в C # - PullRequest
9 голосов
/ 18 июня 2010

У меня есть приложение CForms WinForms, которое иногда требуется для автоматизации управления Excel. Это хорошо работает с обычным ранним связыванием, но у меня были некоторые проблемы, когда люди не установили Excel, но все еще хотят использовать мое приложение, за исключением части Excel. Позднее связывание кажется решением этой проблемы. Позднее связывание довольно утомительно в C # 3, но я не делаю ничего особенно сложного. Я следую за http://support.microsoft.com/kb/302902 как стартер, и он работает хорошо.

Мой вопрос: как я могу использовать enum по имени?

например, как я могу использовать отражение, чтобы получить значение Microsoft.Office.Interop.Excel.XlFileFormat.xlTextWindows, чтобы я мог использовать его для вызова InvokeMethod?

Я знаю, что самый простой способ - это, вероятно, создать собственное локальное перечисление с тем же «магическим» целочисленным значением, но было бы лучше иметь возможность доступа к нему по имени. В документах часто не указывается значение, поэтому для его получения мне, вероятно, понадобится небольшое тестовое приложение с ранней привязкой, которое может подсказать это значение.

Спасибо

Ответы [ 3 ]

15 голосов
/ 18 июня 2010

Значения перечисления считаются полями, поэтому вы можете использовать метод Type.GetField для получения значения параметра перечисления через отражение.

Сокращенный пример:

namespace ConsoleApp
{
    enum Foo { Bar = 5 }

    class Program
    {
        static void Main()
        {
            // Get the assembly containing the enum - Here it's the one executing
            var assembly = Assembly.GetExecutingAssembly();

            // Get the enum type
            var enumType = assembly.GetType("ConsoleApp.Foo");

            // Get the enum value
            var enumBarValue = enumType.GetField("Bar").GetValue(null);

            // Use the enum value
            Console.WriteLine("{0}|{1}", enumBarValue, (int)enumBarValue);
        }
    }
}

Выходы:

// Bar|5
0 голосов
/ 18 июня 2010

Учитывая следующий пример:

enum Test
{
    Value1,
    Value2
}

Я могу получить список значений и имен, например:

foreach (var enumValue in typeof(Test).GetEnumValues())
{
    string name = enumValue.ToString();
    int value = (int) enumValue;
}
0 голосов
/ 18 июня 2010

Поможет ли Enum.Parse ?Например

// given this enum
enum MyEnum 
{
  Value1,
  Value2
}

// you can get the value via string
MyEnum value = (MyEnum)Enum.Parse(typeof(MyEnum), "Value1");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...