ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.CSharpToVBNetConvertVisitor.ConvertEqualityToReferenceEqualityIfRequired C# (CSharp) Method

ConvertEqualityToReferenceEqualityIfRequired() private method

private ConvertEqualityToReferenceEqualityIfRequired ( BinaryOperatorExpression binaryOperatorExpression ) : void
binaryOperatorExpression BinaryOperatorExpression
return void
		void ConvertEqualityToReferenceEqualityIfRequired(BinaryOperatorExpression binaryOperatorExpression)
		{
			// maybe we have to convert Equality operator to ReferenceEquality
			ResolveResult left = resolver.ResolveInternal(binaryOperatorExpression.Left, ExpressionContext.Default);
			ResolveResult right = resolver.ResolveInternal(binaryOperatorExpression.Right, ExpressionContext.Default);
			if (left != null && right != null && left.ResolvedType != null && right.ResolvedType != null) {
				IClass cLeft = left.ResolvedType.GetUnderlyingClass();
				IClass cRight = right.ResolvedType.GetUnderlyingClass();
				if (cLeft != null && cRight != null) {
					if ((cLeft.ClassType != ClassType.Struct && cLeft.ClassType != ClassType.Enum)
					    || (cRight.ClassType != ClassType.Struct && cRight.ClassType != ClassType.Enum))
					{
						// this is a reference comparison
						if (cLeft.FullyQualifiedName != "System.String") {
							// and it's not a string comparison, so we'll use reference equality
							if (binaryOperatorExpression.Op == BinaryOperatorType.Equality) {
								binaryOperatorExpression.Op = BinaryOperatorType.ReferenceEquality;
							} else {
								binaryOperatorExpression.Op = BinaryOperatorType.ReferenceInequality;
							}
						}
					}
				}
			}
		}