2015-12-05 22 views
0

我想在THIS答案解釋,總結一本字典的所有值(字符串,布爾值),但我得到的錯誤:錯誤試圖總結字典的價值

Overload resolution failed because no accessible 'Sum' accepts this number of type arguments

我也tryed對.netFiddle與此:

Imports System.Linq 
imports system.collections.generic 

Public Module Module1 
    Public Sub Main() 
     Dim a as integer 
     Dim Dic As new dictionary(of string, boolean) _ 
     from {{"First", 0},{"Second",0},{"Third",1}} 
     a = Dic.values.Sum() 
    End Sub 
End Module 

並得到相同的錯誤。 我錯過了什麼?

編輯: 我知道,如果我改變dictionary(of string, boolean)dictionary(of string, integer),但我想知道如果我可以使用sum()檢查布爾值或不代碼將工作。

+1

你想在這裏總結什麼?關鍵是一個字符串,其值是一個布爾值。你想知道有多少值是真的? – Steve

+0

@Steve是的。然後我將所有的值放入一個字符串(「001」) – genespos

+0

@varocarbas我只希望問題的答案 - 我發現的答案!請參閱 – genespos

回答

1

總和不是用於計算字典中有多少條目爲真的正確方法。總和需要integer才能執行。您的鏈接正常工作,因爲字典的值類型爲整數,您有一個布爾類型。

如果要統計有多少項在字典中是真實的,那麼你應該使用WhereTrue值枚舉條目,然後Count結果

Public Sub Main() 
    Dim a as integer 
    Dim Dic As new dictionary(of string, boolean) _ 
    from {{"First", 0},{"Second",0},{"Third",1}} 
    a = Dic.Values.Where(Function(x) x = True).Count() 
End Sub 

或也

a = Dic.AsEnumerable().Count(Function(x) x.Value = True) 

請注意,x = Truex.Value = True不是必需的。寫作xx.Value就夠了。這裏只是爲了澄清意圖

+0

非常感謝您的回答!但是我在問:「爲什麼我的代碼在寫入引用的答案時不起作用?」。在這裏,我看到了(如接受的)對字典(字符串,整數)的值進行求和的答案。我也嘗試改變我的詞典到字典(字符串,字節),但我得到了同樣的錯誤。這是我的問題。 – genespos

+1

@genespos我在上面的評論中解釋了你的錯誤:你的字典是字符串和布爾值,這些代碼獲取所有的值(在你的情況下,一組布爾值)。你可以添加整數(在你提到的帖子中發生了什麼),但不是布爾值(除非被轉換爲整數)! – varocarbas

+0

是的,問題是布爾部分。你的代碼編譯僅僅是因爲你有Option Strict Off,當你將這些條目添加到字典中時,這允許值(0,1)與布爾值之間的隱式轉換,但Sum不能自動將存儲在字典中的布爾值轉換爲整數。 – Steve