internal AndTypeConstraint(TypeConstraint left, TypeConstraint right)
        {
            Throw.IfArgumentNull(left, "left");
            Throw.IfArgumentNull(right, "right");

            leftField  = left;
            rightField = right;
        }
        public static TypeConstraint Or(TypeConstraint left, TypeConstraint right)
        {
            if (left == null)
            {
                return(right);
            }

            if (right == null)
            {
                return(left);
            }

            return(new OrTypeConstraint(left, right));
        }
 internal NotTypeConstraint(TypeConstraint filter)
 {
     filterField = filter;
 }
 public static TypeConstraint Not(TypeConstraint filter)
 {
     Throw.IfArgumentNull(filter, "filter");
     return(new NotTypeConstraint(filter));
 }
 public TypeConstraint And(TypeConstraint filter)
 {
     Throw.IfArgumentNull(filter, "filter");
     return(And(this, filter));
 }
 internal OrTypeConstraint(TypeConstraint left, TypeConstraint right)
 {
     leftField  = left;
     rightField = right;
 }