如何检查字符串数组中的所有项是否都是NameValueCollection中的键?

时间:2014-07-29 18:39:10

标签: c# linq lambda

我觉得应该有办法使用lambda来检查NameValueCollection中的所有键是否都在字符串数组中。例如,假设你有:

NameValueCollection nvc; // passed in parameter
string[] requiredFields = new string[] { 
    "copy_ugp", "copy_ep", "copy_et", "copy_eg" 
};

我希望能够做到这样的事情:

if( somelambda which is false if any item in required fields is not in nvc)
{
} else {
   throw new MissingParamsException();
}

我认为应该有一个优雅的解决方案,而不必创建一个设置为true的bool,然后遍历requiredFields并在缺少密钥时将其设置为false。

2 个答案:

答案 0 :(得分:3)

您可以使用Enumerable.Except查找requiredFieldsNameValueCollection中的密钥之间的差异,然后使用Enumerable.Any,如:

if (requiredFields.Except(nvc.AllKeys).Any())

答案 1 :(得分:2)

Habib的解决方案非常好。其他方式将是

if (requiredFields.All(requiredField => collection[requiredField] != null))