在 Iron Python 中访问 .Net 枚举

本文关键字:Net 枚举 访问 Iron Python | 更新日期: 2023-09-27 18:31:03

我正在尝试访问IronPython中的.Net(C#)枚举,假设我们有

测试.dll

// Contains Several Enums
enum TestType{..}
enum TestQuality{..}
....
....
enum TestStatus{..}
//Similarly Multiple functions
public void StartTest(TestType testType, TestQuality testQuality){..}
....
....
public TestStatus GetTestStatus(){..}

现在,如果我尝试调用上述函数,我需要选择合适的枚举参数,到目前为止我所做的是这样的,

铁蟒 [vs2012]

import clr
clr.AddReference('Test.dll')
from TestDll import *
test = Test()
# Initiate Enums
enumTestType = TestType
enumTestQuality = TestQuality
....
....
enumTestStatus = TestStatus
#Call Functions
test.StartTest(enumTestType.Basic, enumTestQuality.High)
....
....
# goes on

现在上面的 IronPython 代码工作正常,这里唯一的奇怪一点是我需要启动所有枚举(智能在这里不起作用),然后再将它们与函数一起使用,当有更多的枚举可以使用时,这将变得更加困难。 而在 C# 环境(vs2012) 中,我们不必启动,但我们可以在调用函数时直接使用它们。

在IronPython中是否有更好的处理方法?

如果我错了,请纠正我,谢谢!

在 Iron Python 中访问 .Net 枚举

假设枚举包含在您的Test类中,您可以使用它们完全限定

test.StartTest(Test.TestType.Basic, Test.TestQuality.High)

或通过导入

from TestDll.Test import TestQuality, TestType
test.StartTest(TestType.Basic, TestQuality.High)

如果枚举与 Test 类位于同一命名空间中,则无需其他导入即可使用枚举:

test.StartTest(TestType.Basic, TestQuality.High)

我遇到了同样的问题,但我以另一种方式修复了它:使用 ScriptRuntime.LoadAssembly .

先决条件:

  • VS2013

  • C# 应用可执行文件,以及 Test.dll 程序集。IronPython由C#应用程序托管。

  • Test.dll:(请注意,所有内容都在 TestDll 命名空间中)

    namespace TestDll
    {
        // Contains Several Enums
        enum TestType{..}
        enum TestQuality{..}
        ....
        ....
        enum TestStatus{..}
        //Similarly Multiple functions
        public void StartTest(TestType testType, TestQuality testQuality){..}
        ....
        ....
        public TestStatus GetTestStatus(){..}
    }
    

我只是这样简单地创建了IronPython引擎:

eng = Python.CreateEngine();
eng.Runtime.LoadAssembly(Assembly.GetAssembly(typeof(TestType)));   // This allows "from TestDLL import *" in Python scripts

然后,用通常的

string pysrc = ...; // omitted, taken from the python script below
ScriptSource source = eng.CreateScriptSourceFromString(pysrc);
ScriptScope scope = eng.CreateScope();
source.Execute(scope);

这允许我编写此 Python 代码并在 C# 应用程序中执行它:(请注意,我直接使用枚举名称)

from TestDll import *
test = Test()
#Call Functions
test.StartTest(TestType.Basic, TestQuality.High)
....
....
# goes on