C# 如何在C中使用后期绑定从程序集获取枚举值#

C# 如何在C中使用后期绑定从程序集获取枚举值#,c#,reflection,C#,Reflection,我有一个C#3.0 WinForms应用程序,偶尔需要它来自动控制Excel。这在正常的早期绑定中工作得很好,但当人们没有安装Excel,但仍然想使用我的应用程序(Excel部分除外)时,我遇到了一些问题。延迟绑定似乎是一种解决方案。后期绑定在C#3中相当乏味,但我没有做任何特别困难的事情。我是先发球员,现在进展顺利 我的问题是如何按名称使用枚举 e、 g,如何使用反射来获取Microsoft.Office.Interop.Excel.XlFileFormat.xlTextWindows的值,以

我有一个C#3.0 WinForms应用程序,偶尔需要它来自动控制Excel。这在正常的早期绑定中工作得很好,但当人们没有安装Excel,但仍然想使用我的应用程序(Excel部分除外)时,我遇到了一些问题。延迟绑定似乎是一种解决方案。后期绑定在C#3中相当乏味,但我没有做任何特别困难的事情。我是先发球员,现在进展顺利

我的问题是如何按名称使用枚举

e、 g,如何使用反射来获取Microsoft.Office.Interop.Excel.XlFileFormat.xlTextWindows的值,以便将其用作调用方法

我知道最简单的方法可能是使用相同的“神奇”整数值创建自己的本地枚举,但最好能够通过名称访问它。文档通常不列出值,所以要获得它,我可能需要一个可以告诉我值的早期绑定测试应用程序

谢谢你能帮忙吗?比如说

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

// you can get the value via string
MyEnum value = (MyEnum)Enum.Parse(typeof(MyEnum), "Value1");

给出以下示例:

enum Test
{
    Value1,
    Value2
}
我可以得到如下值和名称列表:

foreach (var enumValue in typeof(Test).GetEnumValues())
{
    string name = enumValue.ToString();
    int value = (int) enumValue;
}

枚举值被视为字段,因此可以使用方法
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

您是如何在代码中获取excel程序集对象的?我也在使用后期绑定,如果我得到一个excel对象的类型,它会说它们来自mscorlib,因为它们是COM对象。虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@YohDeadfall谢谢,添加了一个示例。