2014-10-29 80 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