public XmlQueryType Intersect(params XmlQueryType[] types) {
if (types.Length == 0)
return None;
else if (types.Length == 1)
return types[0];
// Intersect each type with next type
List<XmlQueryType> list = PrimeIntersect(types[0], types[1]);
XmlQueryCardinality card = types[0].Cardinality & types[1].Cardinality;
for (int i = 2; i < types.Length; i++) {
list = PrimeIntersect(list, types[i]);
card &= types[i].Cardinality;
}
return SequenceType.Create(ChoiceType.Create(list), card);
}