我有这些字典:
public class CiscoVSAN
{
private string _VSANName;
private string _VSANNum;
public string VSANName{ get{return _VSANName;} set{_VSANName=value;} }
public string VSANNum{ get{return _VSANNum;} set{_VSANNum=value;} }
public Dictionary<int, CiscoSwitch> MemberSwitches = new Dictionary<int, CiscoSwitch>();
}
public Dictionary<int, CiscoVSAN> VSANList = new Dictionary<int, CiscoVSAN>();
我正在尝试替换这个 foreach
foreach (KeyValuePair<int, CiscoVSAN> vsanpair in this.VSANList)
{
var currSwitchAsEnumerable = vsanpair.Value.MemberSwitches.Where(cs => cs.Value.switchName == RemoteSwitchName);
if (currSwitchAsEnumerable != null)
{
//currVSAN.MemberSwitches.Add(DomainID, currSwitchAsEnumerable.FirstOrDefault().Value);
currSwitch = currSwitchAsEnumerable.FirstOrDefault().Value;
break;
}
}
在外部字典上有一个 SelectMany。我想要 MemberSwitches 中与条件匹配的第一个匹配项。并非所有 VSAN 在其各自的字典中都有相同的成员交换机。我试过这个:
var selectmany = this.VSANList.SelectMany(cs => cs.Value).Where( => cs).Where(cs.Value.SwitchName == RemoteSwitchName).First();
和这个:
var selectmany = this.VSANList.Values.SelectMany(cs => cs.Value).Where( => cs).Where(cs.Value.SwitchName == RemoteSwitchName).First();
但是每次编译器告诉我它不能从使用中推断出类型参数。我还尝试在 SelectMany 语句之后为其提供类型参数,但这也不起作用。我查看的大多数示例要么是扁平化的列表列表,要么是简单的字典。他们也没有在 SelectMany 上指定任何类型。
编辑添加我试过这个:
Dictionary<int, List<string>> mydict = new Dictionary<int, List<string>>();
var selectlist = mydict.Values.SelectMany(n => n).ToList();
并且没有得到关于推断类型的编译器错误。所以然后我尝试了这个,只是为了展平字典并将其变成一个列表:
var selectmany = this.VSANList.Values.SelectMany(vs => vs).ToList();
我再次收到编译器警告。我不确定要指定什么类型或如何指定它。