2014-10-29 78 views
2

在一个IronPython脚本中,我试图比较一个对象(用C#创建)的属性(类型为Grade)与Grade enum的其中一个可能值。因此,例如:比较IronPython中的枚举值

if (myObject.TotalGrade == Grade.Fail): 

现在,我已经得到这两个值后,设置断点,我确实可以验证他们两人举行“失败”;但是,检查失败并且程序转到下一个子句。 python相等运算符不适合C#枚举吗?

附加信息:我已经从我的C#导入了Grade枚举,如下所示。

import clr 
clr.AddReferenceToFile("mydll.dll") 
from mydll import Grade 
+2

不知道为什么他们会不会比较相等,但显然枚举的[实现为盒装类型(HTTP://名单IronPython中的.ironpython.com/pipermail/users-ironpython.com/2005-August/000915.html) - 对于相同的枚举值,您似乎有两个不同的对象。你可以通过直接通过'myObject.TotalGrade.value__ == Grade.Fail.value__'比较基础值来解决这个问题。 – Cameron 2014-10-29 18:28:02

+0

@Cameron哇,我不知道你是怎么发现的,但是人是那种无价的电子邮件交换。感谢解决这个谜。你能发表你的评论作为答案,所以我可以接受它吗? – estebro 2014-10-29 19:12:05

+0

添加了答案。至于邮件列表,我只是围绕IronPython枚举搜索一下;-) – Cameron 2014-10-29 19:52:20

回答

2

按照要求,作为一个答案我的评论:

我不知道为什么他们会不会比较相等,但显然enums are implemented as boxed types in IronPython - 看来你有相同的枚举值两个不同对象在这种情况下。

您可以变通的作法是直接像这样比较底层的值:

if myObject.TotalGrade.value__ == Grade.Fail.value__: 
    pass # your code here... 
+0

我也困惑为什么它不适用于estebro。解决方法是有效的。我已经创建了一个问题的一个片段,据我所知,它按预期工作https://github.com/paweljasinski/ironsnips/tree/master/dotnetenums – 2014-11-04 10:15:40

+0

@Pawel:嗯,奇怪的是,这有效,OP的不。也许有一个像多个IronPython托管上下文或多个应用程序域的细微差别?我跟踪的最后一个IronPython错误花了我7个小时,所以我不愿意去寻找这个(更微妙的):-) – Cameron 2014-11-04 15:17:43

+0

如果我不能重现,我无法追捕。 – 2014-11-04 19:37:45