2016-09-28 88 views
2

我目前正在研究一個與C#.dll交互的python(for .NET)項目。但是,我輸入的SortedDictionary有些問題。使用SortedDictionary for .net(從C#.dll導入)

這是我在做什麼:

import clr 
from System.Collections.Generic import SortedDictionary 
sorted_dict = SortedDictionary<int, bool>(1, True) 

上sorted_dict調用計數時,我得到了以下錯誤:

AttributeError: 'tuple' object has no attribute 'Count' 

sorted_dict不允許我打電話給任何公衆成員的我在界面中看到的函數(Add,Clear,ContainsKey等)。我是否正確地做這件事?

+0

您使用的Python解釋器是什麼味道?我問,因爲如果'SortedDictionary'是一個類的名字,'SortedDictionary (1,True)'產生元組''(True,True)''。這也可以解釋你所得到的'AttributeError'。該語句是_not_有效的Python語法。 – martineau

+0

@martineau翻譯是CPython。我正在處理的項目使用SortedDictionary ,但是我用這個問題的布爾替換了Object,因爲它在這種情況下仍然不起作用。我認爲這是正確的Python語法,因爲我沒有得到任何有關的錯誤消息,但我認爲這應該解決這種情況。謝謝! – cole

+0

@martineau你介意爲什麼SortedDictionary (1,True)會返回元組(True,True)嗎? – cole

回答

1

問題是這樣的:

SortedDictionary<int, bool>(1, True) 

在此行中的<>符號被取爲比較運算符。 Python看到你提出了兩個要求:

SortedDictionary < int 
bool > (1, True) 

逗號這些表達式之間得到的結果也成爲一個元組,所以你得到(True, True)結果。 (Python 2.x可以讓你比較任何東西;結果可能沒有任何合理的含義,就像這裏的情況一樣)。

很明顯,Python不會像C#那樣爲泛型類型使用相同的<...>語法。相反,您使用[...]

sorted_dict = SortedDictionary[int, bool](1, True) 

這仍然不起作用:您可以:

TypeError: expected IDictionary[int, bool], got int 

這是因爲你試圖用兩個參數來實例化類,當它想一個參數有一個字典界面。所以這將工作:

sorted_dict = SortedDictionary[int, bool]({1: True}) 

編輯:我原本以爲你使用IronPython。看起來像Python for .NET使用類似的方法,所以我相信上述應該仍然有效。

1

「在這種情況下,它肯定是一個語法問題,你使用的Python解釋器沒有comprende的C#語法,我想你需要類似SortedDictionary [int,bool]的基於我剛剛發現的一些編碼示例」@martineau