public static BinaryOperatorAnalysisResult Inapplicable(BinaryOperatorSignature signature, Conversion leftConversion, Conversion rightConversion)
 {
     return new BinaryOperatorAnalysisResult(OperatorAnalysisResultKind.Inapplicable, signature, leftConversion, rightConversion);
 }
        private BetterResult BetterOperator(BinaryOperatorSignature op1, BinaryOperatorSignature op2, BoundExpression left, BoundExpression right)
        {
            var leftBetter = BetterConversionFromExpression(left, op1.LeftType, op2.LeftType);
            var rightBetter = BetterConversionFromExpression(right, op1.RightType, op2.RightType);

            if (leftBetter == BetterResult.Neither)
            {
                return rightBetter;
            }

            if (rightBetter == BetterResult.Neither)
            {
                return leftBetter;
            }

            if (leftBetter == rightBetter)
            {
                return leftBetter;
            }

            return BetterResult.Neither;
        }
 private BinaryOperatorAnalysisResult(OperatorAnalysisResultKind kind, BinaryOperatorSignature signature, Conversion leftConversion, Conversion rightConversion)
     : this()
 {
     this.Kind = kind;
     this.Signature = signature;
     this.LeftConversion = leftConversion;
     this.RightConversion = rightConversion;
 }
 private bool IsApplicable(BinaryOperatorSignature binaryOperator, BoundExpression left, BoundExpression right)
 {
     return
         Conversions.ClassifyConversion(left, binaryOperator.LeftType).IsImplicit &&
         Conversions.ClassifyConversion(right, binaryOperator.RightType).IsImplicit;
 }