[Mono-bugs] [Bug 78799][Wis] Changed - Missing operator == on Uri class

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Tue Aug 1 06:09:42 EDT 2006

Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by alan.mcgovern at gmail.com.


--- shadow/78799	2006-07-08 18:06:04.000000000 -0400
+++ shadow/78799.tmp.6852	2006-08-01 06:09:41.000000000 -0400
@@ -1,14 +1,14 @@
 Bug#: 78799
 Product: Mono: Class Libraries
 Version: 1.1
+OS: unknown
 OS Details: 
 Status: NEW   
+Severity: Unknown
 Priority: Wishlist
 Component: System
 AssignedTo: mono-bugs at ximian.com                            
 ReportedBy: tomas_matousek at hotmail.com               
 QAContact: mono-bugs at ximian.com
 TargetMilestone: ---
@@ -20,6 +20,42 @@
 Unhandled Exception: System.MissingMethodException: Method not 
 found: 'System.Uri.op_Equality'.
 The method is implemented in .NET Framework 2.0 but not in Mono which 
 prevents smooth migration.
+------- Additional Comments From alan.mcgovern at gmail.com  2006-08-01 06:09 -------
+These methods are now in the URI class, so this could be closed...
+Also, i believe the implementation of these methods is flawed. From 
+MSDN you can see that the inequality method return value is as 
+true if the two Uri instances are not equal; otherwise, false. If 
+either parameter is a null reference (Nothing in Visual Basic), this 
+method returns true.
+And when checking for equality:
+UserInfo and Fragment content is ignored when making this comparison.
+The obvious mistakes i've noticed so far are that UserInfo is taken 
+into account when checking for equality. Also, it's possible that 
+equals will return true if one of the parameters is null, which is 
+wrong. I'm not sure how fragment checking works... but that may also 
+be broken.
+Here's an updated method which fixes those two bugs. It would still 
+need testing to make sure fragments are being correctly ignored:
+		public static bool operator == (Uri u1, Uri u2)
+		{
+			if (u1 == null || u2 == null)
+                            return false;
+			return u1.scheme == u2.scheme &&
+				u1.host == u2.host &&
+				u1.port == u2.port &&
+				u1.path == u2.path &&
+				u1.query == u2.query;
+		}

More information about the mono-bugs mailing list