2

だから私はこれらの部分的なクラスを持っています。ParseFCIEの部分的な実装と私の質問については、以下を参照してください。

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> ();
} 

ParseFCIEの一部は、入力データの着信スイッチがCiscoVSANオブジェクトのSwitchMembersディクショナリにすでに存在するかどうかを確認し、存在しない場合は追加します。2つの辞書ステートメントがあります。最初のステートメントは機能し、2番目のステートメントは、述語のタイプを判別できないとコンパイラーが言っており、その理由はわかりません。それはたった1つのステップなので、私は2番目の2番目のステートメントを好みます。最初にスイッチを検索してから、検索結果のnull値を確認します。

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))) 
     {}
}
4

2 に答える 2

2
if (this.VSANList.SelectMany(v => v.Value.MemberSwitches).Any(x => x.ContainsKey(DID))) {
}
于 2012-09-12T03:06:05.780 に答える
0

v.Value.MemberSwitches.ContainsKey(DID)booleanネストされたディクショナリにキーが含まれているかどうかを示す、を返します。
SelectMany()フラット化するためにコレクションを返すデリゲートが必要です。

を呼び出す必要がありますAny()

于 2012-09-12T03:06:12.677 に答える