ICSharpCode.NRefactory.MonoCSharp.TypeDefinition.CheckPairedOperators C# (CSharp) Метод

CheckPairedOperators() публичный Метод

public CheckPairedOperators ( ) : void
Результат void
		void CheckPairedOperators ()
		{
			bool has_equality_or_inequality = false;
			List<Operator.OpType> found_matched = new List<Operator.OpType> ();

			for (int i = 0; i < members.Count; ++i) {
				var o_a = members[i] as Operator;
				if (o_a == null)
					continue;

				var o_type = o_a.OperatorType;
				if (o_type == Operator.OpType.Equality || o_type == Operator.OpType.Inequality)
					has_equality_or_inequality = true;

				if (found_matched.Contains (o_type))
					continue;

				var matching_type = o_a.GetMatchingOperator ();
				if (matching_type == Operator.OpType.TOP) {
					continue;
				}

				bool pair_found = false;
				for (int ii = 0; ii < members.Count; ++ii) {
					var o_b = members[ii] as Operator;
					if (o_b == null || o_b.OperatorType != matching_type)
						continue;

					if (!TypeSpecComparer.IsEqual (o_a.ReturnType, o_b.ReturnType))
						continue;

					if (!TypeSpecComparer.Equals (o_a.ParameterTypes, o_b.ParameterTypes))
						continue;

					found_matched.Add (matching_type);
					pair_found = true;
					break;
				}

				if (!pair_found) {
					Report.Error (216, o_a.Location,
						"The operator `{0}' requires a matching operator `{1}' to also be defined",
						o_a.GetSignatureForError (), Operator.GetName (matching_type));
				}
			}

			if (has_equality_or_inequality) {
				if (!HasEquals)
					Report.Warning (660, 2, Location, "`{0}' defines operator == or operator != but does not override Object.Equals(object o)",
						GetSignatureForError ());

				if (!HasGetHashCode)
					Report.Warning (661, 2, Location, "`{0}' defines operator == or operator != but does not override Object.GetHashCode()",
						GetSignatureForError ());
			}
		}