2012-09-12 47 views
2

所以我有這些部分類。請參閱下面的部分實現ParseFCIE和我的問題。 ParseFCIE的詞典和SelectMany()

class CiscoSwitch 
{ 
    Dictionary<int, CiscoVSAN> VSANList = new Dictionary<int, CiscoVSAN>(); 
    public void ParseFCIE(string block) 
    {} 
} 

class CiscoVSAN 
{ 
    Dictionary<string, CiscoSwitch> MemberSwitches = new Dictionary<string, CiscoSwitch>(); 
} 

部分是檢查在輸入數據的傳入開關是否已在任何CiscoVSAN對象的SwitchMembers辭典,如果沒有,添加它。我有2個字典語句。第一條語句有效,第二條語句編譯器說它不能確定謂詞的類型,我不知道爲什麼。我更喜歡第二個聲明,因爲它只是一步。搜索交換機的第一種方法是檢查搜索結果的空值。

ParseFCIE(string block) 
{ 
    string DID = string.Empty; 
    //partial implementation 
    // 'this' is a CiscoSwitch object 
    //this works 
    var vsans= this.VSANList.SelectMany(v => v.Value.MemberSwitches. 
          Where(d => d.Value.switchName == this.switchName)); 
    // assume DID now has a value; 
    // this line the compiler says the type arguments cannot be inferred from usage 
    if (this.VSANList.SelectMany(v => v.Value.MemberSwitches.ContainsKey(DID))) 
    {} 
} 

回答

2
if (this.VSANList.SelectMany(v => v.Value.MemberSwitches).Any(x => x.ContainsKey(DID))) { 
} 
0

v.Value.MemberSwitches.ContainsKey(DID)返回一個boolean,指示嵌套字典中是否包含鍵。
SelectMany()需要一個委託,它返回一個集合,使其變平。您需要致電Any()

+0

感謝您的解釋。這就說得通了。 –