Please add your comments to this file about mismatches between the API
documentation and the implementation in the Microsoft or ECMA implementations
of the class libraries.

* Type.GetCustomAttributes(Type, bool)

	Documentation does not mention that an ArgumentNullException is
	thrown if Type is a null value.

* Rectangle.IsEmpty and  RectangleF.IsEmpty

	Documentation says "This property returns true if the Width, Height, X, 
	and Y properties of this RectangleF all have values of zero; otherwise, 
	false." Reality: returns TRUE if width or height are equal 0.		

* Array.CreateInstance (Type, long[] lengths)

	Docs say if lengths is null, it will throw an ArgumentNullException,
	but actually .NET 1.1 throws a NullReferenceException.

* String Constructor (Char[], Int32, Int32):
	
	String s = new String ((char[])null, 0, 0) throws a null, but the docs
	say it shouldn't.

* File.Exists:

	File.Exists(null) returns false whenever there is a problem with the
	path or permissions.  This is a security feature which prevents the
	abuse of this method to discover what files might exist on the sytem.
	This doc error has been confirmed with MS and should be fixed in
	the next version of the docs.

* SocketPermission.IsSubsetOf:

	10.11.4.* IsSubsetOf 10.11.*.* returns false --> which is incorrect

* SecurityElement.IsValid* ():

	All return incorrect results. E.g. IsValidTag ("&") returns true while
	it should be false and IsValidAttributeValue ("1 >= 2") returns false
	while this should be true.

* SocketPermission.Union (null):
	
	Doesn't throw an ArgumentNullException. 

* System.Net.Cookie.Value:

	Spec says property cannot accept the semicolon and comma characters,
	yet it does.
	
* System.Net.Cookie.Domain:
  
  	Setting this property has no effect on ToString
  	
* System.Net.Cookie Path:
  
  	Setting this property has no effect on ToString
  	
* System.Net.CookieCollection:
  
  	The ReadOnly property has a getter only, which always returns true. 
  	Yet you can always add Cookie's. 
  
* Array.IList.Contains(object): 
	Throws an exception when called on a multi-dimensional array. Docs
	do not say this. Similar to Array.IList.IndexOf(object).

* Version.CompareTo(null):

	Does not throw an exception. Any version compared to null is
	considered to be subsequent to null.

* BitConverter.To*():

	The docs say it should be ArgumentOutOfRangeException in the
	case where "startIndex is less than zero or greater than the
	length of value minus 2.", but the mscorlib throws an
	ArgumentException.

* Guid.Guid(string) ctor:

	The documentation says this ctor accepts (amongst others) the format
	"{0xdddddddd,0xdddd,0xdddd,{0xdd},{0xdd},{0xdd},{0xdd},{0xdd},{0xdd},
	{0xdd},{0xdd}}". As implemented in mscorlib, however, it accepts:
	"{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}.

* Guid.ToString(string format):

	The documentation specifies that if the format is the empty
	string or null, this is equivalant to a format "N". In
	mscorlib, the format "D" is taken here.

* String.Compare (String, Int32, String, Int32, Int32):

	The documentation is a bit confusing.

	In the "Remarks" section it says

	>> The number of characters compared is the lesser of the length of
	   strA less indexA, the length of strB less indexB, and length.
	
	In the "Exception" section it says a condition for the
	ArgumentOutOfRangeException
	
	>> The sum of indexA and length is greater than strA. Length. 
	>> -or-
	>> The sum of indexB and length is greater than strB. Length.
	>> -or-
	>> indexA, indexB, or length is negative.
	
	The latter implies that Compare ("ab", 0, "abcdef", 0, 3) will
	throw an exception - but the "Remarks" section implies that it will
	not. Both mscorlib.dll and our class libraries behave according to
	the "Remarks" section.

* TypeBuilder.GetInterfaces

	This method does not return all the interfaces as documented,
	it only returns the interfaces that are implemented by this
	class, but not the interfaces that are exposed by the parent
	classes

* Array.CopyTo (Array, int).

	According to the documentation, an ArgumentException is thrown
	if either "index is equal to or larger than the size of the
	array" or "the number of elements in the source array is
	greater than the available space from index to the end of the
	destination array".
	
	The first condition is wrong, an exception is not thrown if
	index is equal to the length of array, but the source array
	contains zero elements:
	
	   int[] src = new int [0];
	   int[] dest = new int [0];
	   src.CopyTo (dest, 0)

* Assembly.Load (string)

	The documentation states that the argument is the 'display name'
	of an assembly (eg 'System.Data') but since v1 this method will
	only successfully load an assembly if a full reference is given.
	The docs even give the following example:
		
		Assembly SampleAssembly;
		// Load the assembly by providing the type name.
		SampleAssembly = Assembly.Load("System.Data");

	which fails with a FileNotFoundException. Apparently the method
	to use for loading an assembly given a display name is
	Assembly.LoadWithPartialName (string).

* SortedList.Clear ()

	The documentation claims that the Capacity of the sorted list
	will not change, but it does.

* StringBuilder.Insert (int index, string value, int count)

	It throws an exception for count < 1 instead of count < 0, which
	is what ECMA says.