将用户定义的类型从 IronPython 传递给 C#
Pass user defined type to C# from IronPython
我使用的 C#/.NET 库 (.dll) 有许多我希望作为参数传递的用户定义的枚举类型,例如,
public enum fieldType_e
{
FIELDTYPE_NONE = 0, // 0 - Field
FIELDTYPE_1, // 1 - Field
FIELDTYPE_2, // 2 - Field
FIELDTYPE_3, // 3 - Field
FIELDTYPE_LAST
}
到一个成员函数:
public bool CMD_AddUser(int UserNumb, String PrimaryField, fieldType_e FieldType )
{
.
.
.
}
例如,当我从 IronPython 调用 CMD_AddUser( 1, '2222', 3)
时,它接受前两个参数(int 和 string),但拒绝类型 fieldType_e
。
这是一个示例 IronPython 会话:
C:\>ipy
IronPython 2.7.5 (2.7.5.0) on .NET 4.0.30319.34209 (32-bit)
Type "help", "copyright", "credits" or "license" for more information.
>>> import clr
>>> clr.AddReferenceToFileAndPath('Library.dll')
>>> import Library.Protocols.R3
>>> type(Library.Protocols.R3)
<type 'namespace#'>
>>> from Library.Protocols.R3 import R3Serial
>>> from Library.Protocols.R3 import R3_App
>>>
>>> # Instantiate Library.Protocols.R3 classes
>>> App = R3_App()
>>> R3_Serial = R3Serial("COM3", 115200, 0)
>>> R3_Serial.App.CMD_Handshake()
True
>>> R3_Serial.App.CMD_AddUser( 1, '2222', 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Cannot convert numeric value 3 to fieldType_e. The value must be zero.
IronPython 识别枚举 fieldType_e 和元素 FIELDTYPE_NONE,但在我尝试使用它时抛出 AttributeError。
>>> AHG_Library.fieldType_e.FIELDTYPE_NONE
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'namespace#' object attribute 'fieldType_e' is read-only
您传递了整数 (3) 而不是枚举 fieldType_e。FIELDTYPE_3
我使用的 C#/.NET 库 (.dll) 有许多我希望作为参数传递的用户定义的枚举类型,例如,
public enum fieldType_e
{
FIELDTYPE_NONE = 0, // 0 - Field
FIELDTYPE_1, // 1 - Field
FIELDTYPE_2, // 2 - Field
FIELDTYPE_3, // 3 - Field
FIELDTYPE_LAST
}
到一个成员函数:
public bool CMD_AddUser(int UserNumb, String PrimaryField, fieldType_e FieldType )
{
.
.
.
}
例如,当我从 IronPython 调用 CMD_AddUser( 1, '2222', 3)
时,它接受前两个参数(int 和 string),但拒绝类型 fieldType_e
。
这是一个示例 IronPython 会话:
C:\>ipy
IronPython 2.7.5 (2.7.5.0) on .NET 4.0.30319.34209 (32-bit)
Type "help", "copyright", "credits" or "license" for more information.
>>> import clr
>>> clr.AddReferenceToFileAndPath('Library.dll')
>>> import Library.Protocols.R3
>>> type(Library.Protocols.R3)
<type 'namespace#'>
>>> from Library.Protocols.R3 import R3Serial
>>> from Library.Protocols.R3 import R3_App
>>>
>>> # Instantiate Library.Protocols.R3 classes
>>> App = R3_App()
>>> R3_Serial = R3Serial("COM3", 115200, 0)
>>> R3_Serial.App.CMD_Handshake()
True
>>> R3_Serial.App.CMD_AddUser( 1, '2222', 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Cannot convert numeric value 3 to fieldType_e. The value must be zero.
IronPython 识别枚举 fieldType_e 和元素 FIELDTYPE_NONE,但在我尝试使用它时抛出 AttributeError。
>>> AHG_Library.fieldType_e.FIELDTYPE_NONE
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'namespace#' object attribute 'fieldType_e' is read-only
您传递了整数 (3) 而不是枚举 fieldType_e。FIELDTYPE_3