检查列表<t>是否包含任何其他列表

我有这样的参数列表:

public class parameter { public string name {get; set;} public string paramtype {get; set;} public string source {get; set;} } IEnumerable<Parameter> parameters; 

而我想检查它的string数组。

 string[] myStrings = new string[] { "one", "two"}; 

我想迭代参数列表,并检查源属性是否等于任何myStrings数组。 我可以用嵌套的foreach来做到这一点,但我想学习如何以更好的方式来做到这一点,因为我已经玩弄了LINQ,就像enumerable的扩展方法一样,所以嵌套的foreach只是感觉错了。 有没有一个更优雅的首选linq / lambda / delegete方式来做到这一点。

谢谢

你可以使用一个嵌套的Any()来检查任何Enumerable上可用的检查:

 bool hasMatch = myStrings.Any(x => parameters.Any(y => y.source == x)); 

在较大的集合上执行速度更快的是将parameters投影到source ,然后使用Intersect在内部使用HashSet<T>而不是O(n ^ 2)作为第一种方法(相当于两个嵌套循环),您可以执行检查在O(n)中:

 bool hasMatch = parameters.Select(x => x.source) .Intersect(myStrings) .Any(); 

也作为一个方面的评论,你应该大写你的类名称和属性名称,以符合C#风格的指导方针。