所以我有这些部分类。请参阅下面的部分实现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个字典陈述。第一个语句有效,第二个语句编译器说它无法确定谓词的类型,我不知道为什么。我更喜欢第二个声明,因为它只是一步。我搜索交换机的第一种方法是检查搜索结果的空值。
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)))
{}
}
答案 0 :(得分:2)
if (this.VSANList.SelectMany(v => v.Value.MemberSwitches).Any(x => x.ContainsKey(DID))) {
}
答案 1 :(得分:0)
v.Value.MemberSwitches.ContainsKey(DID)
返回boolean
,表示该嵌套词典是否包含该键
SelectMany()
需要一个返回集合的委托来展平。
您需要致电Any()
。